2009-10-01 3 views
35

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

+9

Это делается с помощью JavaScript, а не PHP. PHP работает только на стороне сервера. Хотя, обнюхивая разрешение экрана пользователя, помните, что не все пользователи просматривают весь экран! – sjstrutt

+0

CSS-способ отображения дизайна на размер: http://stackoverflow.com/questions/19186243/javascript-to-get-screen-width-in-php-variable –

+0

Используйте JavaScript для получения этой информации и отправки через AJAX – Elyor

ответ

51

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

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

+0

Кайл вы нашли способ получить размеры порта просмотра браузера? –

+0

@KyleFarris ... я не так хорош на jquery и json .. как это будет код, это похоже на bellow '$ (function() { $ .post ('header.php', {width: 800px }, функция (JSON) { если (json.outcome == 'успех') { заголовок-800px.php // сделать что-то со знанием возможно ?} еще { header.php; } },» json '); }); ' –

+0

Я не согласен с вами относительно разрешения представления, однако, ответ велик! Я предполагаю, что эта информация может использоваться для статистики и запрета. Я бы предпочел для этого агент пользователя и ip. Разрешение экрана тоже хорошо! – volter9

5

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

1

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

0

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

+6

Это будет? X = 1024 & y = 640 – EFraim

+0

Я думаю, вам нужно использовать & y вместо? Y –

20

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

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

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

+2

+1 для подробных объяснений, а не для максимизации окон вашего браузера. Мои окна браузера обычно имеют ширину около 800 пикселей; веб-страницы, которые меняют размеры на основе моего разрешения экрана, являются проклятием моего существования! –

23

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

Хорошее решение - реализовано и отлично работает. Я также вытащил http_user_agent (хотя он не всегда был заполнен/точным). Хотелось бы получить доступ к фактическому размеру порта просмотра браузера. (в отличие от экрана res). –

+0

Мне нравится это решение. Простой - перенаправление на страницу с размером в URL-адресе. Для всех, кто это читает, вы можете получить размер видового экрана браузера - см. Http://stackoverflow.com/questions/8794338, в котором говорится (с помощью jquery) использовать функции .height() и .width(). – Ukuser32

+0

Хорошее решение, но, пожалуйста, вы можете предоставить нам один, используя cookie вместо сеансов? –

5

Я нашел использование 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 или аналогичных.

+0

Это не работает –

3

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

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

+1

Не должно быть RDSSC? Lol – JorgeeFG

+0

Я обновил его: RESponsive design + компоненты на стороне сервера :) – benske

+0

Ссылка устарела. Пожалуйста обновите. – sieppl

1

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

0

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

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

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

Где путь/к/ядро ​​путь к директории «ядро», который вы загрузили с сайта SourceForge. И, наконец, использовать свойства:

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

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

0

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']; 
1

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

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

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

<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"]; 
} 
-2
<script type="text/javascript"> 

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

</script> 

<?php echo $screen; ?> 
+0

Вы не можете установить переменную php в JavaScript. – japetko

+0

Чтобы объяснить это гениальное: первый php выполняется на стороне сервера, т.е. перед тем как дойти до браузера, в то время как javascript выполняется после достижения браузера. – reverbnation

0

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

Смежные вопросы