Вопрос

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

Это было полезно?

Решение

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

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

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.Это правда, что 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

Используйте 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>'; 

    ?>

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

Вы можете попробовать 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 для мобильных устройств

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

Я не смог найти реальный рабочий пример 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

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

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

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

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

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

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

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

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

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

<?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; ?> 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top