Web

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

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

 

Ответ 1

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

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

jquery:

$(function() {

    $.post('some_script.php', { width: screen.width, height:screen.height }, function(json) {

        if(json.outcome == 'success') {

            // Возможно что-либо сделать с этими значениями?

        } else {

            alert('Невозможно определить в PHP разрешение экрана!');

        }

    },'json');

});

PHP (some_script.php)

<?php

// Например, вы можете сделать что-то вроде этого:

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

}

?>

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

 

Ответ 2

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

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

<?php

session_start();

if(isset($_SESSION['screen_width']) AND isset($_SESSION['screen_height'])){

    echo 'Разрешение экрана пользователя: ' . $_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>';

}

?>

Новое решение. Если вам нужно отправить другой параметр в Get Method:

<?php

session_start();

if(isset($_SESSION['screen_width']) AND isset($_SESSION['screen_height'])){

    echo 'Разрешение экрана пользователя: ' . $_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>';

}

?>

 

Ответ 3

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

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

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

 

Ответ 4

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

     ?>

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

 

Ответ 5

Это очень простой процесс. Да, вы не можете получить ширину и высоту в 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>Использование jquery.cookie.js для хранения высоты и ширины экрана</h1>

    <?php

         if(isset($_COOKIE['sw'])) { echo "Ширина экрана: ".$_COOKIE['sw']."<br/>";}

         if(isset($_COOKIE['sh'])) { echo "Высота экрана: ".$_COOKIE['sh']."<br/>";}

    ?>

    </body>

 </html>

 

Ответ 6

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

Мне не удалось найти реальный рабочий пример 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) {  // создание скрытой формы

      echo "<input type='text' id='".str_replace('.','',$p)."' name='".str_replace('.','',$p)."'>";

    }

    echo "<input type='submit'></form>";

    echo "<script>";

    foreach($clientProps as $p) {  // заполнить скрытую форму информацией об экране/окне

      echo "document.getElementById('" . str_replace('.','',$p) . "').value = $p;";

    }

    echo "document.forms.namedItem('data').submit();"; //отправка формы

    echo "</script>";

  } else {

    echo "<table>";

    foreach($clientProps as $p) {   // создать выходную таблицу

      echo "<tr><td>".ucwords(str_replace('.',' ',$p)).":</td><td>".$_POST[str_replace('.','',$p)]."</td></tr>";

    }

    echo "</table>";

  }

?>

<script>

    window.history.replaceState(null,null); // избежать предупреждения формы, если пользователь нажимает кнопку обновить

</script>

</body>

</html>

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

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

 

Схожие статьи

Инструменты для разработки Web-сайтов и подборка полезных ссылок
Web

Инструменты для разработки Web-сайтов и подборка полезных ссылок

Преимущества и недостатки языка программирования PHP
Web

Преимущества и недостатки языка программирования PHP

Как обойти блокировку интернета на работе и зайти на нужные сайты?
Web

Как обойти блокировку интернета на работе и зайти на нужные сайты?

Web

Как использовать PHPMailer для массовой рассылки писем