2009-10-01 27 views
35

Ho bisogno di trovare la risoluzione dello schermo di uno schermo utente che visita il mio sito web?Ottenere la risoluzione dello schermo usando PHP

+9

Questo viene fatto tramite JavaScript, non in PHP. PHP viene eseguito solo sul lato server. Mentre annusi la risoluzione dello schermo di un utente, tieni presente che non tutti gli utenti navigano a schermo intero! – sjstrutt

+0

Un modo CSS per il rendering del design dep sulle dimensioni: http://stackoverflow.com/questions/19186243/javascript-to-get-screen-width-in-php-variable –

+0

Usa JavaScript per ottenere queste informazioni e inviare tramite AJAX – Elyor

risposta

51

Non è possibile farlo con PHP puro. Devi farlo con JavaScript. Ci sono diversi articoli scritti su come farlo.

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

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 è veramente essenziale, ma dovrebbe portarti da qualche parte Normalmente la risoluzione dello schermo non è ciò che vuoi veramente. 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 ...

+0

Kyle hai trovato un modo per ottenere le dimensioni della porta di visualizzazione del browser? –

+0

@KyleFarris ... non sono così bravo su jquery e json .. come sarà il codice è come il muggito '$ (function() { $ .post ('header.php', {width: 800px }, la funzione (jSON) { se (json.outcome == 'successo') { header-800px.php // fare qualcosa con la conoscenza possibilmente ?} else { header.php; }} ,' json '); }); ' –

+0

Non sono d'accordo con te sulla risoluzione della vista, tuttavia la risposta è ottima! Immagino che queste informazioni possano essere usate per statistiche e ban. Preferirei di più user agent e ip per questo. Anche la risoluzione dello schermo è buona! – volter9

5

Utilizzare JavaScript (screen.width e screen.height IIRC, ma potrei avere torto, non ho fatto JS tra un po '). PHP non può farlo.

1

L'unico modo è usare javascript, quindi ottenere il javascript per postarlo sul tuo php (se hai davvero bisogno di lì lato res server). Questo tuttavia cadrà completamente sulla sua faccia, se si spegne javascript.

0

PHP funziona solo sul lato server, non sull'host dell'utente. Utilizzare JavaScript o jQuery per ottenere queste informazioni e inviarle tramite AJAX o URL (? X = 1024 & y = 640).

+6

Sarebbe? X = 1024 & y = 640 – EFraim

+0

penso che sia necessario utilizzare & y invece di? Y –

20

PHP è un linguaggio lato server - viene eseguito solo sul server e l'output del programma risultante viene inviato al client. Pertanto, non sono disponibili informazioni sullo "schermo client".

Detto questo, puoi chiedere al client quale sia la risoluzione dello schermo tramite JavaScript. Scrivi un piccolo scriptlet per inviarti screen.width e screen.height - possibilmente tramite AJAX, o più probabilmente con una "jump page" iniziale che lo trova, quindi reindirizza a http://example.net/index.php?size=AxB

Pur parlando come utente, vorrei Preferisco di gran lunga progettare un sito per gestire in modo fluido qualsiasi risoluzione dello schermo. Scorro finestre di dimensioni diverse, per lo più non ingrandite.

+2

+1 per le spiegazioni dettagliate e non massimizzare le finestre del browser. Le finestre del mio browser sono generalmente larghe circa 800 pixel; le pagine Web che si ridimensionano in base alla risoluzione dello schermo sono la rovina della mia esistenza! –

23

Direttamente con PHP non è possibile, ma ...

Scrivo questo semplice codice a salva la risoluzione dello schermo su una sessione PHP da utilizzare 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>'; 
} 
?> 
+0

Buona soluzione - implementata e funziona alla grande. Ho anche estratto http_user_agent (anche se non è sempre pieno/accurato). Vorrei che ci fosse un modo per afferrare la dimensione effettiva della porta di visualizzazione del browser. (in contrasto con lo schermo res). –

+0

Mi piace questa soluzione. Semplice: reindirizza a una pagina con dimensioni nell'URL. Per chiunque stia leggendo questo, è possibile ottenere la dimensione del viewport del browser: consultare http://stackoverflow.com/questions/8794338 che dice (con jquery) utilizza le funzioni .height() e .width(). – Ukuser32

+0

Buona soluzione ma, per favore, puoi fornirci una cookie usando invece delle sessioni? –

5

Ho trovato utilizzando CSS nel mio html all'interno del 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>'; 

    ?> 

Questo visualizzerà un titolo di dimensioni più piccole se lo schermo è 480px o meno. Quindi non è necessario passare alcun vars usando JS o simili.

+0

Questo non funziona –

3

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

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

+1

Non dovrebbe essere RDSSC? Lol – JorgeeFG

+0

L'ho aggiornato: Design RESponsive + Componenti lato server :) – benske

+0

Il collegamento non è aggiornato. Per favore aggiornare. – sieppl

1

Non credo che è possibile rilevare le dimensioni dello schermo puramente con PHP, ma è possibile rilevare l'utente -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 Detect

0

In PHP non c'è stan modo per ottenere queste informazioni. Tuttavia, è possibile se si sta utilizzando una soluzione di terze parti. Rilevatore dispositivo 51Degrees per PHP ha le proprietà che hanno bisogno:

Ti dà larghezza e l'altezza dello schermo dell'utente in pixel. Per utilizzare queste proprietà è necessario scaricare il rilevatore da 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 di 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.

0

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

questo può essere fatto facilmente usando i cookie. Questo metodo consente alla pagina di controllare i valori dei cookie memorizzati rispetto all'altezza e alla larghezza dello schermo (o ai valori di altezza e larghezza della porta del browser) e, se sono diversi, ripristinerà il cookie e ricaricherà la pagina. Il codice deve consentire le preferenze dell'utente. Se i cookie persistenti sono disattivati, utilizzare un cookie di sessione. Se ciò non funziona devi andare con un'impostazione predefinita.

  1. Javascript: Verificare se l'altezza & cookie di larghezza impostato
  2. Javascript: Se impostato, controllare se screen.height & screen.width (o quello che volete) corrisponde al valore corrente del cookie
  3. Javascript: Se il cookie non è impostato o non corrisponde al valore corrente, allora: a. Javascript: crea un cookie persistente o di sessione chiamato (ad esempio) 'shw' sul valore della schermata attuale.una schermata & screen.width.
    b. Javascript: reindirizza a SELF usando window.location.reload(). Quando si ricarica, salterà il passaggio 3.
  4. PHP: $ _COOKIE ['shw'] contiene valori.
  5. Continuare con PHP

Ad es, Sto usando alcune funzioni di cookie comuni trovate sul web. Assicurati che setCookie restituisca i valori corretti. Inserisco questo codice immediatamente dopo il tag head. Ovviamente la funzione dovrebbe essere in un file sorgente.

<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"]; 
} 
-2
<script type="text/javascript"> 

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

</script> 

<?php echo $screen; ?> 
+0

Non è possibile impostare una variabile php in un JavaScript. – japetko

+0

Per spiegare questo genoso: Primo php eseguito sul lato server ie. prima di raggiungere il browser, mentre javascript viene eseguito dopo aver raggiunto il browser. – reverbnation

0

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 oggetti per riga tipo di deal) ma il web design dovrebbe essere fluido, quindi ogni elemento di riga non dovrebbe essere inserito nelle tabelle a meno che non sia una tabella reale (e i dati scaleranno alle sue singole celle) se si usa un div puoi impilare ogni elemento uno accanto all'altro e la finestra dovrebbe "spezzare" la fila nel punto giusto. (serve solo css corretto)

Problemi correlati