Получение разрешения экрана с помощью PHP

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

24 ответа

Решение

Вы не можете сделать это с чистым 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"));
}
?>

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

Непосредственно с 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>';
}
?>

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

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

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

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

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

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

?>

Я обнаружил, что использование 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 или аналогичные.

Вы можете проверить это, как показано ниже:

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'mobile') || strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'android')) {
   echo "mobile web browser!";
} else {
echo "web browser!";
}

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

Это очень простой процесс. Да, вы не можете получить ширину и высоту в 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

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

Я не смог найти реально работающий пример 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 Перешли на переменные. Например:

  • window.innerWidth возвращается в $windowinnerWidth

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

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

Я не думаю, что вы можете определить размер экрана исключительно с помощью 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

Вы можете установить ширину окна в куки, используя JS во внешнем интерфейсе, и вы можете получить его в 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'];
?>

Единственный способ - использовать javascript, а затем получить javascript для публикации на своем php(если вам действительно нужна серверная часть res). Это, однако, полностью упадет на его лице, если они выключат 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'];

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

$width = "<script>var windowWidth = screen.width; document.writeln(windowWidth); </script>";
$height = "<script>var windowHeight = screen.height; document.writeln(windowHeight); </script>"; 

echo 'This screen is : '.$width.' x '.$height;

Это можно легко сделать с помощью файлов cookie. Этот метод позволяет странице проверять сохраненные значения файлов cookie по высоте и ширине экрана (или значениям высоты и ширины порта просмотра в браузере), и, если они отличаются, он сбрасывает файлы cookie и перезагружает страницу. Код должен учитывать пользовательские настройки. Если постоянные файлы cookie отключены, используйте файл cookie сеанса. Если это не работает, вы должны пойти с настройкой по умолчанию.

  1. Javascript: проверьте, установлены ли cookie-файлы высоты и ширины
  2. Javascript: если установлен, проверьте, соответствует ли screen.height & screen.width (или как вы хотите) текущему значению файла cookie
  3. Javascript: если cookie не установлен или не соответствует текущему значению, то: a. Javascript: создайте постоянный или сессионный cookie с именем (например) 'shw', равным значению текущего screen.height & screen.width.
    б. Javascript: перенаправить на SELF с помощью window.location.reload(). Когда он перезагрузится, он пропустит шаг 3.
  4. PHP: $ _COOKIE ['shw'] содержит значения.
  5. Продолжить с PHP

Например, я использую некоторые распространенные функции файлов cookie, которые можно найти в Интернете. Убедитесь, что setCookie возвращает правильные значения. Я поставил этот код сразу после тега head. Очевидно, что функция должна быть в исходном файле.

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

Вот код Javascript: (index.php)

<script>
    var xhttp = new XMLHttpRequest();  
    xhttp.open("POST", "/sqldb.php", true);
    xhttp.send("screensize=",screen.width,screen.height);
</script>

Вот код PHP: (sqldb.php)

$data = $_POST['screensize'];
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$statement = $pdo->prepare("UPDATE users SET screen= :screen WHERE id = $userid");
$statement->execute(array('screen' => $data));

Я надеюсь, что вы знаете, как получить $ userid из сеанса, и для этого вам нужна база данных с таблицей с именем users и таблицей внутри пользователей с именем screen;=) С уважением, KSP

Чтобы получить экран ширины или высоты экрана
1- Создайте файл PHP (getwidthscreen.php) и напишите в нем следующие команды
PHP (getwidthscreen.php)

      <div id="widthscreenid"></div>
<script>
document.getElementById("widthscreenid").innerHTML=screen.width;
</script>

2- Получите экран ширины через сеанс cURL с помощью следующих команд
PHP (main.php)

      $ch = curl_init( 'http://hostname/getwidthscreen.php' );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$result = curl_exec( $ch );
print_r($result);
curl_close( $ch );

Что ж, у меня есть еще одна идея, благодаря которой это на 90% возможно очень простым способом с использованием чистого PHP. Мы не сразу узнаем точное разрешение экрана, но узнаем, использует ли пользователь компьютер (более высокое разрешение) или телефон (более низкое разрешение) и благодаря этому сможем загрузить конкретные данные. Пример кода:

      $user_agent = $_SERVER['HTTP_USER_AGENT'];

if (strpos($user_agent, 'Windows') !== false) {
    //PC, high resolution
    //*note for phone is: Windows Phone
} elseif (strpos($user_agent, 'Mac') !== false) {
    //PC, high resolution
} else {
    //mobile, small resolution
   //Android, iOS, Windows Phone, Blackberry OS, Symbian OS, Bada OS, Firefox OS, WebOS, Tizen OS, KaiOS, Sailfish OS, Ubuntu Touch, HarmonyOS, EMUI, OxygenOS, One UI, Magic UI, ColorOS, MiUI, OxygenOS, ZenUI, LG UX, FunTouch OS, Flyme OS, OxygenOS, Samsung One UI, Android One, Android Go, Android TV, Android Auto, Fuchsia OS.
}

Тогда отличным решением для завершения проверки является создание куки и проверка данных с помощью PHP.

      //JS:
function setCookieResolution() {
        // Get screen resolution
        if (!getCookieValue("screen_resolution")) {
            var screenResolution = window.screen.width + "x" + window.screen.height;
            // Create cookie with resolution info
            document.cookie = "screen_resolution=" + screenResolution + ";path=/";
        }
    }
    setCookieResolution();

//PHP:
if (isset($_COOKIE["screen_resolution"])) {
    $currentValue = $_COOKIE["screen_resolution"];//example: 1920x1080
    $parts = explode("x", $currentValue);
    if(count($parts) == 2 && is_numeric($parts[0]) && is_numeric($parts[1])) {
        $width = (int)$parts[0];
        $height = (int)$parts[1];
    } else {
        // handle error
    }
}

PHP работает только на стороне сервера, а не на хосте пользователя. Используйте JavaScript или jQuery, чтобы получить эту информацию и отправить через AJAX или URL (? X =1024&y=640).

Быстрый ответ - нет, тогда вы, вероятно, спрашиваете, почему я не могу сделать это с помощью php. ОК, это более длинный ответ. PHP - это серверный язык сценариев, и поэтому он не имеет ничего общего с типом конкретного клиента. Тогда вы можете спросить "почему я могу получить агент браузера от php?", Потому что эта информация отправляется с начальными заголовками HTTP по запросу на сервер. Поэтому, если вы хотите, чтобы информация о клиенте не отправлялась с заголовком HTTP, вы должны использовать язык сценариев клиента, такой как javascript.

Решение: сделать масштабируемый веб-дизайн... (наше, я должен сказать, правильный веб-дизайн) форматирование должно быть сделано на стороне клиента, и я хотел бы, чтобы информация передавалась на сервер, но информация все еще полезна (сколько объектов в строках вида дело), ​​но веб-дизайн все еще должен быть гибким, поэтому каждый элемент строки не должен быть помещен в таблицы, если это не фактическая таблица (а данные будут масштабироваться до отдельных ячеек). Если вы используете div, вы можете сложить каждый элемент рядом друг с другом Ваше окно должно "разбить" строку в нужном месте. (просто нужно правильно CSS)

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

Дает вам ширину и высоту экрана пользователя в пикселях. Чтобы использовать эти свойства, вам необходимо скачать детектор из sourceforge. Затем вам нужно включить следующие 2 строки в ваш файл / файлы, где необходимо определить высоту и ширину экрана:

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

Где путь / к / ядру - это путь к директории 'Core', которую вы загрузили из sourceforge. Наконец, чтобы использовать свойства:

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

Имейте в виду, что эти переменные могут содержать значение "Неизвестно" несколько раз, когда устройство не может быть идентифицировано.

<script type="text/javascript">

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

</script>

<?php echo $screen; ?> 
Другие вопросы по тегам