Domanda

Ho bisogno di trovare la risoluzione dello schermo di un utente schermo che visita il mio sito web?

È stato utile?

Soluzione

Non si può farlo con puro PHP. È necessario farlo con JavaScript. Ci sono diversi articoli scritti su come fare questo.

In sostanza, è possibile impostare un cookie o si può anche fare un po 'Ajax per inviare le informazioni ad uno script PHP. Se si utilizza jQuery, si può fare qualcosa di simile a questo:

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"));
}
?>

Tutto ciò che è davvero essenziale ma dovrebbe arrivare da qualche parte. risoluzione dello schermo di solito non è quello che si vuole veramente però. Si può essere più interessati alla dimensione della porta di visualizzazione del browser vero e proprio dal momento che è in realtà in cui la pagina viene visualizzata ...

Altri suggerimenti

Direttamente con PHP non è possibile, ma ...

Scrivo questo semplice codice per salvare la risoluzione dello schermo su una sessione di PHP da usare su una galleria di immagini.

<?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 è un linguaggio lato server - è eseguito su un solo server, e l'output del programma risultante viene inviato al client. Come tale, non c'è alcuna informazione "schermo del client" a disposizione.

Detto questo, si può avere il client di dirvi ciò che la loro risoluzione dello schermo è tramite JavaScript. Scrivi un piccolo scriptlet per l'invio di screen.width e screen.height - eventualmente tramite la tecnologia AJAX, o più probabilmente con una "pagina zum" iniziale che trova, quindi reindirizza a http://example.net/index.php?size=AxB

Anche se si parla come utente, mi piacerebbe preferiscono di gran lunga di progettare un sito per gestire in modo fluido qualsiasi risoluzione dello schermo. Navigo in finestre di dimensioni diverse, la maggior parte non massimizzata.

Questo è un processo molto semplice. Sì, non è possibile ottenere la larghezza e l'altezza in PHP. E 'vero che JQuery può fornire larghezza e l'altezza dello schermo. In primo luogo andare a https://github.com/carhartl/jquery-cookie e ottenere jquery.cookie .js. Ecco ad esempio utilizzando PHP per ottenere la larghezza e l'altezza dello schermo:

    <!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>

Ho un test che è possibile eseguire: http://rw-wrd.net/test.php

Usa JavaScript (screen.width e screen.height IIRC, ma posso sbagliarmi, non hanno fatto JS in un po '). PHP non può farlo.

Ho trovato usando i CSS dentro la mia html dentro il mio php ha fatto il trucco per me.

<?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>'; 

    ?>

Questa uscita volontà un titolo più piccolo di dimensioni, se lo schermo è 480px o meno. Quindi non c'è bisogno di passare eventuali Vars utilizzando JS o simili.

Si può provare RESS (componenti lato server di design + reattivo), consultare questo tutorial:

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

Non credo che è possibile rilevare le dimensioni dello schermo puramente con PHP, ma è possibile rilevare l'user-agent ..

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

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

Ecco un link ad uno script più dettagliato: PHP mobile Rileva

Completamente funzionante Esempio

non riuscivo a trovare un esempio reale di lavoro PHP per "invisibile" (senza parametri URL) ritorno dimensioni dello schermo client , e altre proprietà, per PHP lato server , così ho messo insieme questo esempio.

JS popola e invia un modulo nascosto (sceneggiato da PHP da una matrice di proprietà JS), POSTing a se stesso (i dati ora disponibili in PHP) e restituisce i dati in una tabella.

(testato in "diversi" browser.)

<!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>

I dati restituito è extract 'd in variabili. Ad esempio:

  • window.innerWidth viene restituito in $windowinnerWidth

L'unico modo è quello di utilizzare javascript, quindi ottenere il javascript per inviare ad esso per il vostro php (se si ha realmente bisogno ci res lato server). Ciò tuttavia completamente fiasco sul suo volto, se attivare i javascript off.

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'];

Questo può essere fatto facilmente utilizzando i cookie. Questo metodo permette la pagina per controllare i valori dei cookie memorizzati contro l'altezza dello schermo e la larghezza (o il browser altezza vista porto e valori di larghezza), e se sono diversi verranno azzerate il cookie e ricaricare la pagina. Il codice ha bisogno per consentire le preferenze dell'utente. Se i cookie persistenti sono disattivati, utilizzare un cookie di sessione. Se questo non funziona si deve andare con un'impostazione di default.

  1. JavaScript: Verificare se l'altezza e la larghezza set di cookie
  2. JavaScript: Se impostato, controllare se screen.height & screen.width (o quello che volete) corrisponde al valore corrente del cookie
  3. JavaScript: Se cookie non impostato o non corrisponde al valore corrente, quindi:  un. Javascript: creare cookie persistente o di una sessione di nome (ad esempio) 'SHW' al valore della screen.height & screen.width corrente
    .  b. Javascript: reindirizzare auto utilizzando window.location.reload (). Quando ricarica, si salta la fase 3.
  4. PHP: $ _COOKIE [ 'shw'] contiene valori.
  5. Continua con PHP

per es., Io sto usando alcune funzioni comuni di cookie sul web. Assicurarsi che setCookie restituisce i valori corretti. Ho messo subito questo codice dopo il tag testa. Ovviamente la funzione dovrebbe essere in un file di una fonte.

<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"];
}

È possibile impostare la larghezza della finestra in cookie utilizzando JS di front-end e si può ottenere in PHP:

<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'];
?>

La risposta più immediata è no, allora si sono probabilmente chiedendo perché non posso farlo con php. OK qui è una risposta più lunga. PHP è un linguaggio di scripting lato server e per questo non ha nulla a che fare con il tipo di un client specifico. Poi si potrebbe chiedere "perché posso quindi ottenere l'agente browser da php?", Questo è perché questa informazione viene inviata con le intestazioni HTTP iniziali su richiesta al server. Quindi, se volete informazioni sul client che non è inviato con l'intestazione HTTP è necessario un linguaggio di scripting come JavaScript client.

In PHP non esiste un modo standard per ottenere queste informazioni. Tuttavia, è possibile se si utilizza una soluzione di terze parti. Rilevatore dispositivo 51Degrees per PHP ha le proprietà necessari:

Ti dà larghezza e l'altezza dello schermo dell'utente in pixel. Per poter utilizzare queste proprietà è necessario scaricare il rilevatore dalla sourceforge . Allora avete bisogno di includere le seguenti 2 righe nel file / file dove è necessario rilevare l'altezza dello schermo e larghezza:

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

Dove path / to / core è percorso alla directory 'core', che è stato scaricato da sourceforge. Infine, per utilizzare le proprietà:

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

Tenete a mente queste variabili possono contenere valore 'Unknown' alcune volte, quando il dispositivo non è stato identificato.

soluzione: fare web design scalabile ... (il nostro dovrei dire una corretta progettazione web) formattazione dovrebbe essere fatto lato client e volevo informazioni sarebbe stata tramandata al server, ma le informazioni sono ancora utile (quanti struttura per file tipo di accordo), ma ancora di web design dovrebbe essere fluido così ogni elemento di riga non dovrebbe essere messo in tabelle meno che il suo un tavolo reale (e i dati saranno scala alla sua singole celle) se si utilizza un div è possibile impilare ogni elemento vicino alla l'altro e la finestra dovrebbe "rompere" la riga nel punto corretto. (Solo bisogno di una corretta css)

PHP funziona solo sul lato server, non su di accoglienza degli utenti. Utilizzare JavaScript o jQuery per ottenere queste informazioni e inviare tramite la tecnologia AJAX o l'URL (? X = 1024 & y = 640).

Il modo più semplice

<?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; ?> 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top