Pregunta

Necesito encontrar la resolución de pantalla de una pantalla de usuarios que visita mi sitio web?

¿Fue útil?

Solución

No se puede hacer con PHP puro. Debe hacerlo con JavaScript. Hay varios artículos escritos sobre cómo hacer esto.

En esencia, se puede establecer una cookie o incluso se puede hacer un poco de Ajax para enviar la información a un script PHP. Si utiliza jQuery, lo puede hacer algo como esto:

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

Todo lo que es realmente básico pero debe conseguir que en alguna parte. resolución de la pantalla normalmente no es lo que realmente quiere sin embargo. Usted puede estar más interesado en el tamaño de la ventana de observación del navegador real, ya que es en realidad donde la página se representa ...

Otros consejos

directamente con PHP no es posible, pero ...

escribo este código simple de ahorrar resolución de la pantalla en una sesión de PHP para usar en una galería de imágenes.

<?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 es un lenguaje del lado del servidor - se ejecuta en un solo servidor, y la salida del programa resultante se envía al cliente. Como tal, no hay información "pantalla del cliente" disponible.

Una vez dicho esto, puede hacer que el cliente le diga cuál es su resolución de pantalla es a través de JavaScript. Escribir un pequeño scriplet le envíe screen.width y Screen.Height - posiblemente a través de AJAX, o más probablemente con un "salto de página" inicial que encuentra, a continuación, vuelve a dirigir a http://example.net/index.php?size=AxB

A pesar de hablar como un usuario, me gusta mucho más a diseñar un sitio para manejar fluidamente cualquier resolución de pantalla. Hojeo en diferentes ventanas de tamaño, en su mayoría no maximiza.

Este es un proceso muy simple. Sí, no se puede obtener el ancho y la altura en PHP. Es cierto que JQuery puede proporcionar anchura y la altura de la pantalla. Primero vaya a https://github.com/carhartl/jquery-cookie y obtener jquery.cookie Js. Aquí es ejemplo usando php para obtener el ancho de la pantalla y la altura:

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

Tengo una prueba de que se puede ejecutar: http://rw-wrd.net/test.php

El uso de JavaScript (screen.width y screen.height IIRC, pero puedo estar equivocado, no lo han hecho desde hace tiempo JS). PHP no puede hacerlo.

He encontrado el uso de CSS dentro de mi html dentro de mi php hizo el truco para mí.

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

    ?>

Esta es la salida un titular de tamaño más pequeño si la pantalla es 480px o menos. Por lo tanto no hay necesidad de pasar algún vars utilizando JS o similar.

Puede intentar RESS (componentes de diseño + lado del servidor que responde), consulte este tutorial:

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

No creo que se puede detectar el tamaño de la pantalla puramente con PHP, pero se puede detectar el agente de usuario ..

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

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

Aquí hay un enlace a una escritura más detallada: PHP móvil Detectar

Totalmente Ejemplo de trabajo

No pude encontrar un ejemplo de PHP de trabajo real a "invisible" (sin parámetros de URL) retorno tamaño de la pantalla del cliente , y otras propiedades, a PHP del lado del servidor , por lo que poner este ejemplo juntos.

JS puebla y envía un formulario oculto (guión de PHP de una matriz de propiedades JS), POSTing a sí mismo (los datos ahora disponibles en PHP) y devuelve los datos en una tabla.

(Probado en "varios" de los navegadores.)

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

Los datos devueltos es extract 'd en variables. Por ejemplo:

  • window.innerWidth se devuelve en $windowinnerWidth

La única manera es usar Javascript, a continuación, obtener el JavaScript para poder hacer a él para su PHP (si es que realmente necesita no res lado del servidor). Esto sin embargo completamente caer de bruces, en caso de que se conviertan Javascript apagado.

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

Esto se puede hacer fácilmente el uso de cookies. Este método permite que la página para comprobar los valores de las cookies almacenadas en contra de la altura de la pantalla y la anchura (o altura navegador puerto de vista y valores de anchura), y si son diferentes se restablecerá la cookie y volver a cargar la página. El código debe permitir las preferencias del usuario. Si las cookies persistentes están desactivadas, utilizar una cookie de sesión. Si eso no funciona, hay que ir con una configuración por defecto.

  1. Javascript: Comprobar si la altura y anchura del conjunto de cookies
  2. Javascript: Si se establece, comprobar si Screen.Height y screen.width (o como se quiera) coincide con el valor actual de la cookie
  3. Javascript: Si la galleta no está ajustado o no coincide con el valor actual, a continuación:  a. Javascript: crear cookie persistente o una sesión de llamada (por ejemplo) 'shw' a valor de Screen.Height y screen.width actual
    .  si. Javascript: redirigir a AUTO utilizando window.location.reload (). Cuando se vuelve a cargar, se saltará el paso 3.
  4. PHP: $ _COOKIE [ 'shw'] contiene los valores.
  5. Continuar con PHP

por ejemplo., Estoy usando algunas funciones de galletas comunes que se encuentran en la web. Asegúrese de que setCookie devuelve los valores correctos. Pongo este código inmediatamente después de la etiqueta de la cabeza. Es evidente que la función debe estar en un archivo fuente.

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

Puede configurar ancho de la ventana en las cookies utilizando JS en la parte delantera y se puede obtener en 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 respuesta rápida es no, entonces usted probablemente se estará preguntando por qué no puedo hacer eso con php. Aceptar que aquí hay una respuesta más larga. PHP es un lenguaje de script serverside y por lo tanto no tiene nada que ver con el tipo de un cliente específico. Entonces usted puede preguntar "¿por qué puedo continuación, obtener el agente navegador desde php?", Eso es porque esa información se envía con las cabeceras HTTP iniciales a petición al servidor. Así que si quieres información del cliente que no se envía con la cabecera HTTP se debe que un lenguaje de script del cliente como JavaScript.

En PHP no hay una forma estándar para obtener esta información. Sin embargo, es posible si está utilizando una solución de 3 ª parte. Detector de dispositivos 51Degrees para PHP tiene las propiedades que necesita:

Te da anchura y la altura de la pantalla del usuario en píxeles. Para utilizar estas propiedades es necesario descargar el detector de sourceforge . Luego hay que incluir los siguientes 2 líneas en su archivo / archivos donde es necesario detectar la altura y la anchura de la pantalla:

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

Donde ruta / a / núcleo es ruta al directorio 'núcleo' que descargó desde SourceForge. Finalmente, para utilizar las propiedades:

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

Tenga en cuenta estas variables pueden contener 'Unknown' valor algunas veces, cuando no se pudo identificar el dispositivo.

solución: hacer que el diseño web escalable ... (nuestro mejor dicho, diseño web adecuado) formateo se debe hacer en el cliente y yo deseaba que la información se transmite al servidor, pero la información sigue siendo muy útil (por cuántos objetos filas tipo de acuerdo), pero aún el diseño web debe ser fluida por lo tanto cada uno elementos de fila no se deben poner en tablas a menos que su una tabla real (y los datos se escalan a que es células individuales) si se utiliza un div se pueden apilar cada elemento junto a entre sí y la ventana debe "romper" la fila en el lugar adecuado. (Sólo tiene css adecuada)

PHP funciona sólo en el lado del servidor, no en el host del usuario. Utilizar JavaScript o jQuery para obtener esta información y enviar a través de AJAX o URL (? X = 1024 & y = 640).

La manera más fácil

<?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; ?> 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top