Obtener la resolución de la pantalla usando PHP
¿Necesito encontrar la resolución de pantalla de la pantalla de un usuario que visita mi sitio web?
No puedes hacerlo con PHP puro. Debes hacerlo con JavaScript. Hay varios artículos escritos sobre cómo hacer esto.
Básicamente, puedes configurar una cookie o incluso puedes usar Ajax para enviar la información a un script PHP. Si usas jQuery, puedes hacerlo de esta manera:
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 (algún_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 eso es realmente básico pero debería llevarte a alguna parte. Sin embargo, normalmente la resolución de la pantalla no es la que realmente deseas. Quizás esté más interesado en el tamaño de la ventana de visualización del navegador real, ya que ahí es donde se representa la página...
Directamente con PHP no es posible pero...
Escribo este código simple para guardar la resolución de la pantalla en una sesión PHP y usarla 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>';
}
?>
Nueva solución si necesita enviar otro parámetro en el método Get (por Guddu Modok)
<?php
session_start();
if(isset($_SESSION['screen_width']) AND isset($_SESSION['screen_height'])){
echo 'User resolution: ' . $_SESSION['screen_width'] . 'x' . $_SESSION['screen_height'];
print_r($_GET);
} else if(isset($_GET['width']) AND isset($_GET['height'])) {
$_SESSION['screen_width'] = $_GET['width'];
$_SESSION['screen_height'] = $_GET['height'];
$x=$_SERVER["REQUEST_URI"];
$parsed = parse_url($x);
$query = $parsed['query'];
parse_str($query, $params);
unset($params['width']);
unset($params['height']);
$string = http_build_query($params);
$domain=$_SERVER['PHP_SELF']."?".$string;
header('Location: ' . $domain);
} else {
$x=$_SERVER["REQUEST_URI"];
$parsed = parse_url($x);
$query = $parsed['query'];
parse_str($query, $params);
unset($params['width']);
unset($params['height']);
$string = http_build_query($params);
$domain=$_SERVER['PHP_SELF']."?".$string;
echo '<script type="text/javascript">window.location = "' . $domain . '&width="+screen.width+"&height="+screen.height;</script>';
}
?>
PHP es un lenguaje del lado del servidor: se ejecuta únicamente en el servidor y el resultado del programa resultante se envía al cliente. Como tal, no hay información disponible en la "pantalla del cliente".
Dicho esto, puedes hacer que el cliente te diga cuál es su resolución de pantalla a través de JavaScript. Escriba un pequeño scriptlet para enviarle screen.width y screen.height, posiblemente a través de AJAX, o más probablemente con una "página de salto" inicial que lo encuentre y luego lo redireccione a http://example.net/index.php?size= AxB
Aunque como usuario, prefiero que diseñes un sitio que maneje con fluidez cualquier resolución de pantalla. Navego en ventanas de diferentes tamaños, la mayoría no maximizadas.
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>";
?>
Descubrí que usar CSS dentro de mi html dentro de mi php funcionó 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>';
?>
Esto generará un título de menor tamaño si la pantalla tiene 480 px o menos. Por lo tanto, no es necesario pasar ninguna variable usando JS o similar.