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

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

17 ответов


вы не можете сделать это с чистым 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. Напишите небольшой сценарий, чтобы отправить вам экран.ширина и экран.высота-возможно, через AJAX или, скорее всего, с начальной "страницей перехода", которая находит ее, а затем перенаправляет на http://example.net/index.php?size=AxB

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


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


Я обнаружил, что использование 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 или меньше. Поэтому нет необходимости передавать любые vars с помощью JS или аналогичного.


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

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


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

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


единственный способ-использовать javascript, а затем получить javascript для публикации на вашем php (если вам действительно нужна серверная сторона res). Однако это полностью упадет на его лицо, если они отключат javascript.


JS:

$.ajax({
    url: "ajax.php",
    type: "POST",
    data: "width=" + $("body").width(),
    success: function(msg) {

        return true;
    }
});

"Аякса".в PHP

if(!empty($_POST['width']))
    $width = (int)$_POST['width'];

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

  1. Javascript: проверьте, есть ли высота и ширина печенье набор
  2. Javascript: если установлен, проверьте, если экран.высота и экрана.ширина (или что вы хотите) соответствует текущему значению cookie
  3. Javascript: если cookie не установлен или не соответствует текущему значению, то: a. Javascript: создайте постоянный или сеансовый cookie с именем (например) 'shw' для значения текущего экрана.высота и экрана.ширина.
    b. Javascript: перенаправление на SELF с помощью окна.местоположение.перезаряжать.)( Когда он перезагружается, он пропустит Шаг 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"];
}

самый простой способ сделать это:

$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;

Это очень простой процесс. Да, вы не можете получить ширину и высоту в PHP. Это правда, что JQuery может обеспечить ширину и высоту экрана. Сначала перейдите кhttps://github.com/carhartl/jquery-cookie и получить jquery.печенье.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 нет стандартного способа получить эту информацию. Однако это возможно, если вы используете стороннее решение. Детектор устройств 51Degrees для PHP имеет необходимые свойства:

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

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

где path/to / core-путь к каталогу "Core", который вы загрузили из sourceforge. Наконец, чтобы использовать свойства:

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

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


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


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


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

<script type="text/javascript">

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

</script>

<?php echo $screen; ?>