Question

Je dois trouver la résolution d'écran d'un écran utilisateurs qui visitent mon site?

Était-ce utile?

La solution

Vous ne pouvez pas le faire avec PHP pur. Vous devez le faire avec JavaScript. Il y a plusieurs articles écrits sur la façon de le faire.

Pour l'essentiel, vous pouvez définir un cookie ou vous pouvez même faire quelques Ajax pour envoyer les informations à un script PHP. Si vous utilisez jQuery, vous pouvez le faire quelque chose comme ceci:

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

Tout ce qui est vraiment basique, mais il vous faut aller quelque part. Normalement, la résolution de l'écran est ce que vous voulez vraiment bien. Vous pourriez être plus intéressé par la taille du port de vue du navigateur réel puisque c'est en fait où la page est rendue ...

Autres conseils

directement avec PHP est impossible, mais ...

Je vous écris ce code simple pour enregistrer la résolution de l'écran lors d'une session de PHP à utiliser sur une galerie d'images.

<?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 est un langage côté serveur - il est exécuté sur le serveur uniquement, et la sortie du programme résultant est envoyé au client. En tant que tel, il n'y a pas d'information "écran client" disponible.

Cela dit, vous pouvez avoir le client vous dire ce que leur résolution d'écran est via JavaScript. Ecrire un petit scriptlet pour vous envoyer screen.width et screen.height - éventuellement via AJAX, ou plus probablement avec une « page de saut » initial qui le trouve, puis redirige vers http://example.net/index.php?size=AxB

Bien que parlant en tant qu'utilisateur, je préfère de beaucoup vous de concevoir un site pour gérer de façon fluide une résolution d'écran. Je navigue dans les différentes fenêtres de taille, la plupart du temps pas maximisé.

Ce processus est très simple. Oui, vous ne pouvez pas obtenir la largeur et la hauteur en PHP. Il est vrai que JQuery peut fournir la largeur de l'écran et la hauteur. Tout d'abord aller à https://github.com/carhartl/jquery-cookie et obtenir jquery.cookie .js. Voici par exemple en utilisant php pour obtenir la largeur de l'écran et la hauteur:

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

J'ai un test que vous pouvez exécuter: http://rw-wrd.net/test.php

Utiliser JavaScript (screen.width et screen.height IIRC, mais je peux me tromper, ne l'ont pas fait JS dans un certain temps). PHP ne peut pas le faire.

J'ai trouvé à l'aide CSS dans mon html dans mon php a fait l'affaire pour moi.

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

    ?>

Affichera un titre de plus petite taille si l'écran est 480px ou moins. Donc, pas besoin de passer de vars en utilisant JS ou similaire.

Vous pouvez essayer RESS (responsive design + composants côté serveur), voir ce tutoriel:

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

Je ne pense pas que vous pouvez détecter la taille de l'écran uniquement avec PHP, mais vous pouvez détecter l'agent utilisateur ..

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

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

Voici un lien vers un script plus détaillé: PHP Mobile Detect

Entièrement Exemple de travail

Je ne pouvais pas trouver un exemple PHP de travail réel "invisiblement" (sans paramètres d'URL) retour taille de l'écran client , et d'autres propriétés, à côté serveur PHP , donc je mets cet exemple ensemble.

JS Remplit et soumet une forme cachée (écrit par PHP à partir d'un ensemble de propriétés JS), POSTing à lui-même (les données sont maintenant disponibles dans PHP) et renvoie les données dans un tableau.

(testé dans les navigateurs "plusieurs".)

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

Les données renvoyées est extract 'd dans des variables. Par exemple:

  • window.innerWidth est retourné dans $windowinnerWidth

La seule façon est d'utiliser javascript, puis obtenir le javascript pour y publier un message à votre php (si vous avez vraiment besoin il res côté serveur). Cela tombe cependant à plat sur completly son visage, si elles éteignent javascript.

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

Cela peut se faire facilement en utilisant les cookies. Cette méthode permet à la page pour vérifier les valeurs de cookie stockées contre la hauteur de l'écran et la largeur (ou vue navigateur hauteur du port et les valeurs de largeur), et si elles sont différentes, il sera remis à zéro le cookie et recharger la page. Le code doit permettre préférences de l'utilisateur. Si les cookies sont désactivés persistants, utilisez un cookie de session. Si cela ne fonctionne pas, vous devez aller avec un réglage par défaut.

  1. Javascript: Vérifiez si l'ensemble de cookies hauteur et largeur
  2. Javascript: Si elle est définie, vérifiez si screen.height & screen.width (ou tout ce que vous voulez) correspond à la valeur actuelle du cookie
  3. Javascript: Si cookie ne défini ou il ne correspond pas à la valeur actuelle, puis:  une. Javascript: créer cookie persistant ou session nommée (par exemple) 'shw' à la valeur de screen.height actuelle et screen.width
    .  b. Javascript: rediriger vers SELF en utilisant window.location.reload (). Quand il recharge, il sautera l'étape 3.
  4. PHP: $ _COOKIE [ 'shw'] contient des valeurs.
  5. Continuer avec PHP

par exemple., J'utilise des fonctions de cookies courantes sur le web. Assurez-vous que setCookie renvoie les valeurs correctes. Je mets ce code immédiatement après la balise de tête. Il est évident que la fonction devrait être dans un fichier source.

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

Vous pouvez définir la largeur de la fenêtre en utilisant les cookies JS en fin avant et vous pouvez l'obtenir 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 réponse est non, alors vous demandez probablement pourquoi je ne peux pas le faire avec php. OK ici est une réponse plus. PHP est un langage de script côté serveur et celui-ci n'a rien à voir avec le type d'un client spécifique. Ensuite, vous pourriez demander « pourquoi puis-je puis obtenir l'agent du navigateur de php? », C'est parce que l'information est envoyée avec les en-têtes HTTP initiales sur demande au serveur. Donc, si vous voulez des informations client qui n'est pas envoyé avec l'en-tête HTTP, vous devez vous un langage de script client comme javascript.

En PHP, il n'y a aucun moyen standard pour obtenir cette information. Cependant, il est possible que si vous utilisez une solution 3ème partie. détecteur de dispositif 51Degrees pour PHP a les propriétés dont vous avez besoin:

vous donne la largeur et la hauteur de l'écran de l'utilisateur en pixels. Pour utiliser ces propriétés, vous devez télécharger le détecteur de sourceforge . Ensuite, vous devez inclure les éléments suivants 2 lignes dans votre fichier / fichiers où il est nécessaire de détecter la hauteur de l'écran et la largeur:

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

Où chemin / vers / core est le chemin vers le répertoire « Core » que vous avez téléchargé à partir de SourceForge. Enfin, pour utiliser les propriétés:

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

Gardez à l'esprit ces variables peuvent contenir la valeur « Unknown » quelques fois, lorsque l'appareil n'a pas pu être identifié.

Solution: web design évolutif ... (notre devrais-je dire la conception web appropriée) formattage doit être fait côté client et je ne voulais l'information serait transmise au serveur, mais l'info est toujours utile (combien objet par lignes genre d'affaire), mais encore la conception web doit être fluide ainsi chaque élément de ligne ne doivent pas être mis dans les tables à moins que son une table réelle (et les données échelle à c'est des cellules individuelles) si vous utilisez un div vous pouvez empiler chaque élément à côté l'autre et la fenêtre doit « casser » la ligne au bon endroit. (Juste besoin css approprié)

PHP ne fonctionne que sur le côté serveur, et non sur l'hôte de l'utilisateur. Utilisez JavaScript ou jQuery pour obtenir cette information et envoyer via AJAX ou URL (? X = 1024 & y = 640).

meilleure façon

<?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; ?> 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top