Frage

Ich brauche die Bildschirmauflösung eines Benutzer finden screenen, die meine Website besucht?

War es hilfreich?

Lösung

Sie können es mit reiner PHP nicht. Sie müssen es mit JavaScript tun. Es gibt mehrere Artikel geschrieben, wie dies zu tun.

Im Wesentlichen können Sie ein Cookie gesetzt oder Sie können sogar einige Ajax tun, um die Informationen an ein PHP-Skript zu senden. Wenn Sie jQuery verwenden, können Sie es tun so etwas wie folgt aus:

jquery:

$(function() {
    $.post('some_script.php', { width: screen.width, height:screen.height }, function(json) {
        if(json.outcome == 'success') {
            // do something with the knowledge possibly?
        } else {
            alert('Unable to let PHP know what the screen resolution is!');
        }
    },'json');
});

PHP (some_script.php)

<?php
// For instance, you can do something like this:
if(isset($_POST['width']) && isset($_POST['height'])) {
    $_SESSION['screen_width'] = $_POST['width'];
    $_SESSION['screen_height'] = $_POST['height'];
    echo json_encode(array('outcome'=>'success'));
} else {
    echo json_encode(array('outcome'=>'error','error'=>"Couldn't save dimension info"));
}
?>

Alles, wirklich einfach, aber es sollten Sie irgendwo bekommen. Normalerweise Bildschirmauflösung ist nicht das, was Sie wirklich wollen, obwohl. Sie können in der Größe der aktuellen Browser-Ansicht Port mehr daran interessiert sein, da das eigentlich ist, wo die Seite gerendert wird ...

Andere Tipps

Direkt mit PHP ist nicht möglich, aber ...

Ich schreibe diesen einfachen Code Bildschirmauflösung auf einer PHP-Session speichern auf einer Fotogalerie zu verwenden.

<?php
session_start();
if(isset($_SESSION['screen_width']) AND isset($_SESSION['screen_height'])){
    echo 'User resolution: ' . $_SESSION['screen_width'] . 'x' . $_SESSION['screen_height'];
} else if(isset($_REQUEST['width']) AND isset($_REQUEST['height'])) {
    $_SESSION['screen_width'] = $_REQUEST['width'];
    $_SESSION['screen_height'] = $_REQUEST['height'];
    header('Location: ' . $_SERVER['PHP_SELF']);
} else {
    echo '<script type="text/javascript">window.location = "' . $_SERVER['PHP_SELF'] . '?width="+screen.width+"&height="+screen.height;</script>';
}
?>

PHP ist eine serverseitige Sprache - es ist nur auf dem Server ausgeführt ist, und die sich ergebende Programmausgabe wird an den Client gesendet. Als solches ist es keine „Client-Bildschirm“ Informationen zur Verfügung.

Das heißt, der Client sagen haben, können Sie, was ihre Bildschirmauflösung via JavaScript ist. eine kleine scriptlet schreiben screen.width Sie senden und screen.height - möglicherweise über AJAX, oder eher mit einer anfänglichen „jump Seite“, die es findet, leitet dann auf http://example.net/index.php?size=AxB

Obwohl als Benutzer gesagt, ich würde viel lieber eine Website zu entwerfen, um in Fluid jede Bildschirmauflösung zu behandeln. Ich sehe in unterschiedlich großen Fenstern, meist nicht maximierte.

Dies ist ein sehr einfacher Prozess. Ja, Sie können nicht die Breite und Höhe in PHP bekommen. Es stimmt, dass JQuery den Bildschirm Breite und Höhe zur Verfügung stellen kann. Zuerst gehen Sie auf https://github.com/carhartl/jquery-cookie und bekommen jquery.cookie Js. Hier ist beispielsweise PHP mit der Bildschirmbreite und Höhe zu erhalten:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Test</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
        <script src="js/jquery.cookie.js"></script>
        <script type=text/javascript>
            function setScreenHWCookie() {
                $.cookie('sw',screen.width);
                $.cookie('sh',screen.height);
                return true;
            }
            setScreenHWCookie();
        </script>
    </head>
    <body>
        <h1>Using jquery.cookie.js to store screen height and width</h1>
    <?php
         if(isset($_COOKIE['sw'])) { echo "Screen width: ".$_COOKIE['sw']."<br/>";}
         if(isset($_COOKIE['sh'])) { echo "Screen height: ".$_COOKIE['sh']."<br/>";}
    ?>
    </body>
    </html>

Ich habe einen Test, dass Sie ausführen können: http://rw-wrd.net/test.php

Verwenden Sie JavaScript (screen.width und screen.height IIRC, aber ich kann falsch sein, haben JS eine Weile nicht getan). PHP kann es nicht tun.

Ich habe CSS in meinem html mit in meinem php den Trick für mich getan hat.

<?php             
    echo '<h2 media="screen and (max-width: 480px)">'; 
    echo 'My headline';
    echo '</h2>'; 

    echo '<h1 media="screen and (min-width: 481px)">'; 
    echo 'My headline';
    echo '</h1>'; 

    ?>

Dies wird Ausgang eine kleinere Schlagzeile, wenn der Bildschirm 480px oder weniger ist. Also keine Notwendigkeit, irgendwelche Vars passiert mit JS oder ähnlichem.

Sie können versuchen, RESS (Responsive Design + Server-Seite-Komponenten) finden Sie in diesem Tutorial:

http://www.lukew.com/ff/entry.asp?1392

Ich glaube nicht, dass Sie die Bildschirmgröße rein mit PHP erkennen können, aber Sie können die User-Agenten erkennen ..

<?php
    if ( stristr($ua, "Mobile" )) {
        $DEVICE_TYPE="MOBILE";
    }

    if (isset($DEVICE_TYPE) and $DEVICE_TYPE=="MOBILE") {
        echo '<link rel="stylesheet" href="/css/mobile.css" />'
    }
?>

Hier ist ein Link zu einer detaillierteren Skript: PHP Mobile-Detect

Vollarbeitsbeispiel

Ich konnte nicht ein tatsächliches Arbeits PHP Beispiel zu finden "unsichtbar" (ohne URL-Parameter) Rückkehr Client Bildschirmgröße und andere Eigenschaften, die serverseitige PHP , so habe ich dieses Beispiel zusammen.

JS bevölkert und legt eine versteckte Form (Drehbuch von PHP aus einem Array von JS Eigenschaften), um sich POSTing (die Daten jetzt in PHP verfügbar) und gibt die Daten in einer Tabelle.

(getestet in "mehrere" Browsern.)

<!DOCTYPE html>
<html>
<head>
    <title>*Client Info*</title>
    <style>table,tr{border:2px solid gold;border-collapse:collapse;}td{padding:5px;}</style>
</head>

<body>
<?php
  $clientProps=array('screen.width','screen.height','window.innerWidth','window.innerHeight', 
    'window.outerWidth','window.outerHeight','screen.colorDepth','screen.pixelDepth');

  if(! isset($_POST['screenheight'])){

    echo "Loading...<form method='POST' id='data' style='display:none'>";
    foreach($clientProps as $p) {  //create hidden form
      echo "<input type='text' id='".str_replace('.','',$p)."' name='".str_replace('.','',$p)."'>";
    }
    echo "<input type='submit'></form>";

    echo "<script>";
    foreach($clientProps as $p) {  //populate hidden form with screen/window info
      echo "document.getElementById('" . str_replace('.','',$p) . "').value = $p;";
    }
    echo "document.forms.namedItem('data').submit();"; //submit form
    echo "</script>";

  }else{

    echo "<table>";
    foreach($clientProps as $p) {   //create output table
      echo "<tr><td>".ucwords(str_replace('.',' ',$p)).":</td><td>".$_POST[str_replace('.','',$p)]."</td></tr>";
    }
    echo "</table>";
  }
?>
<script>
    window.history.replaceState(null,null); //avoid form warning if user clicks refresh
</script>
</body>
</html>

Die zurückgegebenen Daten ist extract 'd in Variablen. Zum Beispiel:

  • window.innerWidth wird in $windowinnerWidth zurückgegeben

Der einzige Weg ist Javascript zu verwenden, dann ist die Javascript, um es zu Ihrem php zu schreiben (wenn Sie wirklich Serverseite müssen dort res). Dies wird jedoch komplett flach fallen auf ihr Gesicht, wenn sie Javascript deaktivieren.

JS:

$.ajax({
    url: "ajax.php",
    type: "POST",
    data: "width=" + $("body").width(),
    success: function(msg) {

        return true;
    }
});

ajax.php

if(!empty($_POST['width']))
    $width = (int)$_POST['width'];

Dies kann leicht mit Hilfe von Cookies durchgeführt werden. Mit dieser Methode kann die Seite, die gespeicherten Cookie-Werte gegen die Bildschirmhöhe und Breite (oder Browser-Ansicht Port Höhe und Breite Werte) überprüfen, und wenn sie unterschiedlich sind, wird es das Cookie zurückgesetzt und die Seite neu. Der Code muss für die Benutzereinstellungen ermöglichen. Wenn persistente Cookies deaktiviert sind, verwenden Sie eine Session-Cookie. Wenn das nicht funktioniert, Sie mit einer Standardeinstellung gehen.

  1. Javascript: Überprüfen Sie, ob Höhe und Breite Cookie-Gruppe
  2. Javascript: Wenn gesetzt, überprüfen, ob screen.height & screen.width (oder was auch immer Sie wollen) entspricht den aktuellen Wert des Cookies
  3. Javascript: Wenn Cookie nicht gesetzt oder es ist der aktuelle Wert nicht übereinstimmen, dann gilt:  ein. Javascript: erstellen persistent oder Session-Cookie genannt (z) 'SHW' auf den Wert der aktuellen screen.height & screen.width
    .  b. Javascript: Umleitung auf SELF mit window.location.reload (). Wenn es neu lädt, wird es den Schritt 3 überspringen.
  4. PHP: $ _COOKIE [ 'SHW'] enthält Werte.
  5. Weiter mit PHP

z.B. Ich verwende einige gemeinsame Funktionen Cookie im Web gefunden. Stellen Sie sicher, setCookie die richtigen Werte zurückgibt. Ich habe diesen Code unmittelbar nach dem Kopf-Tag. Offensichtlich soll die Funktion in einer eine Quelldatei sein.

<head>
<script src="/include/cookielib.js"></script>
<script type=text/javascript>
function setScreenHWCookie() {
    // Function to set persistant (default) or session cookie with screen ht & width
    // Returns true if cookie matches screen ht & width or if valid cookie created
    // Returns false if cannot create a cookies.
    var ok  = getCookie( "shw");
    var shw_value = screen.height+"px:"+screen.width+"px";
    if ( ! ok || ok != shw_value ) {
        var expires = 7 // days
        var ok = setCookie( "shw", shw_value, expires)
        if ( ok == "" ) {
            // not possible to set persistent cookie
            expires = 0
            ok = setCookie( "shw", shw_value, expires)
            if ( ok == "" ) return false // not possible to set session cookie
        }
        window.location.reload();
    }
    return true;
}
setScreenHWCookie();
</script>
....
<?php
if( isset($_COOKIE["shw"])) {
    $hw_values = $_COOKIE["shw"];
}

Sie können Fensterbreite in Cookies JS vor Ende mit und man kann es in PHP bekommen:

<script type="text/javascript">
   document.cookie = 'window_width='+window.innerWidth+'; expires=Fri, 3 Aug 2901 20:47:11 UTC; path=/';
</script>

<?PHP
    $_COOKIE['window_width'];
?>

Die schnelle Antwort ist nein, dann sind Sie wahrscheinlich fragen, warum kann ich das nicht mit PHP. OK hier ist eine längere Antwort. PHP ist eine serverseitige Skriptsprache und dafür hat nichts mit der Art eines bestimmten Kunden zu tun. Dann könnten Sie fragen: „Warum kann ich dann den Browser Agenten von php bekommen?“, Das sind, weil diese Informationen mit den anfänglichen HTTP-Header auf Anfrage an den Server gesendet werden. Also, wenn Sie Client-Informationen mögen, die mit den HTTP-Header müssen Sie Sie sind nicht eine Client-Skriptsprache wie JavaScript gesendet.

In PHP gibt es keinen Standard Weg, um diese Informationen zu erhalten. Es ist jedoch möglich, wenn Sie eine 3rd-Party-Lösung verwenden. 51Degrees Anschlussdetekor für PHP hat die Eigenschaften, die Sie brauchen:

Gibt Ihnen die Breite und Höhe des Bildschirms des Benutzers in Pixeln. Um diese Eigenschaften zu verwenden, müssen Sie den Detektor von Source zum Download bereit. Dann müssen Sie die folgenden zwei Zeilen in der Datei / Dateien schließen, wo es notwendig Bildschirmhöhe und Breite zu erfassen:

<?php
require_once 'path/to/core/51Degrees.php';
require_once 'path/to/core/51Degrees_usage.php';
?>

Wo path / to / Kern Pfad zu 'Core' Verzeichnis, das Sie von Source heruntergeladen. Schließlich, um die Eigenschaften zu verwenden:

<?php
echo $_51d['ScreenPixelsHeight']; //Output screen height.
echo $_51d['ScreenPixelsWidth']; //Output screen width.
?>

Beachten Sie können diese Variablen ‚Unknown‘ Wert einige Male enthalten, wenn das Gerät nicht identifiziert werden konnte.

Lösung: skalierbare Web-Design machen ... (unser sollte ich sagen richtigen Web-Design) Formating Client-Seite getan werden sollte, und ich habe die Informationen möchten Server würden weitergegeben, aber die Info ist immer noch sehr nützlich (wie viele Objekt pro Reihen von Deal Art), aber immer noch soll Web-Design flüssig sein sollten daher jede Zeile Elemente nicht eine tatsächliche Tabelle (und die Daten maßstab setzen in Tabellen, wenn sein werden, um es einzelne Zellen ist), wenn Sie einen div verwenden Sie jedes Element stapeln können neben sie und Fenster sollten „brechen“ die Zeile an der richtigen Stelle. (Nur korrekten CSS benötigen)

PHP funktioniert nur auf Server-Seite, nicht auf Benutzer-Host. Verwenden Sie JavaScript oder jQuery diese Informationen zu erhalten und über AJAX oder URL senden (? X = 1024 & y = 640).

Der einfachste Weg,

<?php 
//-- you can modified it like you want

echo $width = "<script>document.write(screen.width);</script>";
echo $height = "<script>document.write(screen.height);</script>";

?>
<script type="text/javascript">

if(screen.width <= 699){
    <?php $screen = 'mobile';?>
}else{
    <?php $screen = 'default';?>
}

</script>

<?php echo $screen; ?> 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top