Получение разрешения экрана с помощью PHP - PullRequest
42 голосов
/ 01 октября 2009

Мне нужно найти разрешение экрана пользователя, который посещает мой сайт?

Ответы [ 19 ]

53 голосов
/ 01 октября 2009

Вы не можете сделать это с чистым PHP. Вы должны сделать это с помощью JavaScript. О том, как это сделать, написано несколько статей.

По сути, вы можете установить cookie или даже использовать Ajax для отправки информации в скрипт PHP. Если вы используете jQuery, вы можете сделать это примерно так:

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

Все это действительно просто, но оно должно вас куда-то привести. Обычно разрешение экрана не то, что вы действительно хотите. Возможно, вас больше заинтересует размер фактического порта просмотра браузера, поскольку именно там отображается страница ...

25 голосов
/ 11 июля 2012

Непосредственно с PHP невозможно, но ...

Я пишу этот простой код, чтобы сохранить разрешение экрана в сеансе PHP для использования в галерее изображений.

<?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>';
}
?>
19 голосов
/ 01 октября 2009

PHP - это язык на стороне сервера - он выполняется только на сервере, и полученный результат программы отправляется клиенту. Таким образом, информация о «экране клиента» недоступна.

Тем не менее, вы можете попросить клиента сказать, какое у него разрешение экрана через JavaScript. Напишите небольшой скриптлет, который отправит вам screen.width и screen.height - возможно, через AJAX или, скорее, с начальной «страницей перехода», которая его найдет, а затем перенаправит на http://example.net/index.php?size=AxB

Хотя, говоря от имени пользователя, я бы предпочел, чтобы вы разработали сайт, который бы плавно обрабатывал любое разрешение экрана. Я просматриваю в окнах разных размеров, в основном не развернуто.

4 голосов
/ 24 июля 2012

Я обнаружил, что использование CSS внутри моего html внутри моего php помогло мне.

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

    ?>

Это выведет заголовок меньшего размера, если экран 480px или меньше. Поэтому нет необходимости передавать какие-либо переменные, используя JS или аналогичные.

4 голосов
/ 01 октября 2009

Используйте JavaScript (screen.width и screen.height IIRC, но я могу ошибаться, не делал JS в течение некоторого времени). PHP не может этого сделать.

2 голосов
/ 02 июля 2013

Вы можете попробовать RESS (Отзывчивый дизайн + Серверные компоненты), см. Этот урок:

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

1 голос
/ 27 апреля 2014

Я не думаю, что вы можете определить размер экрана чисто с помощью PHP, но вы можете определить пользовательский агент ..

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

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

Вот ссылка на более подробный скрипт: PHP Mobile Detect

1 голос
/ 10 мая 2018

Это очень простой процесс. Да, вы не можете получить ширину и высоту в PHP. Это правда, что JQuery может обеспечить ширину и высоту экрана. Сначала перейдите на https://github.com/carhartl/jquery-cookie и получите jquery.cookie.js. Вот пример использования php для получения ширины и высоты экрана:

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

У меня есть тест, который вы можете выполнить: http://rw -wrd.net / test.php

1 голос
/ 01 мая 2019

Полностью рабочий пример

Мне не удалось найти действующий пример PHP для "невидимо" (без параметров URL) вернуть размер экрана клиента и другие свойства серверному PHP, поэтому Я собрал этот пример.

JS заполняет и отправляет скрытую форму (созданную на основе PHP из массива свойств JS), POST передающую себя (данные теперь доступны в PHP) и возвращает данные в таблице.

(протестировано в «нескольких» браузерах.)

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

Возвращенные данные extract 'd в переменные. Например:

  • window.innerWidth возвращается в $windowinnerWidth
0 голосов
/ 06 февраля 2019

Самый простой способ

<?php 
//-- you can modified it like you want

echo $width = "<script>document.write(screen.width);</script>";
echo $height = "<script>document.write(screen.height);</script>";

?>
...