Мне нужно найти разрешение экрана пользователя, который посещает мой сайт?
Получение разрешения экрана с помощью PHP
Ответы (22)
Вы не можете сделать это с чистым 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"));
}
?>
Все это действительно просто, но это должно вас куда-то привести. Обычно разрешение экрана — это не то, что вам действительно нужно. Вас может больше интересовать размер фактического порта просмотра браузера, поскольку именно там отображается страница...
$(function() { $.post('header.php', { width: 800px }, function(json) { if(json.outcome == 'success') { header-800px.php // do something with the knowledge possibly? } else { header.php; } },'json'); });
- person Accore LTD; 26.11.2013
Непосредственно с 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>';
}
?>
Новое решение, если вам нужно отправить другой параметр в методе Get (от Guddu Modok)
<?php
session_start();
if(isset($_SESSION['screen_width']) AND isset($_SESSION['screen_height'])){
echo 'User resolution: ' . $_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>';
}
?>
PHP является серверным языком - он выполняется только на сервере, а результирующий вывод программы отправляется клиенту. Таким образом, нет доступной информации об «экране клиента».
Тем не менее, вы можете попросить клиента сообщить вам, какое у него разрешение экрана, через JavaScript. Напишите небольшой скриптлет для отправки вам screen.width и screen.height — возможно, через AJAX или, что более вероятно, с начальной «страницей перехода», которая находит их, а затем перенаправляет на http://example.net/index..php?size=AxB
Хотя, говоря как пользователь, я бы предпочел, чтобы вы разработали сайт, который плавно обрабатывает любое разрешение экрана. Я просматриваю в окнах разного размера, в основном не развернутых.
Я обнаружил, что использование 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 или что-то подобное.
Это очень простой процесс. Да, вы не можете получить ширину и высоту в 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
//-- you can modified it like you want
echo $width = "<script>document.write(screen.width);</script>";
echo $height = "<script>document.write(screen.height);</script>";
?>
Используйте JavaScript (screen.width
и screen.height
IIRC, но я могу ошибаться, давно не занимался JS). PHP не может этого сделать.
Полностью рабочий пример
Я не смог найти реально работающий пример PHP, чтобы «невидимо» (без параметров URL) возвратить размер экрана клиента и другие свойства в PHP на стороне сервера, поэтому я соедините этот пример.
JS заполняет и отправляет скрытую форму (скрипт создан PHP из массива свойств JS), POST
ing сам с собой (данные теперь доступны в 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
Вы можете проверить это, как показано ниже:
if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'mobile') || strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'android')) {
echo "mobile web browser!";
} else {
echo "web browser!";
}
Я не думаю, что вы можете определить размер экрана исключительно с помощью 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
Вы можете установить ширину окна в файлах 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'];
?>
Вот код 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 из сеанса, и для этого вам нужна база данных с таблицей, называемой пользователями, и таблицей внутри пользователей, называемой экраном ;=) С уважением, KSP
Единственный способ - использовать 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'];
Это можно легко сделать с помощью файлов cookie. Этот метод позволяет странице сверять сохраненные значения cookie с высотой и шириной экрана (или значениями высоты и ширины порта просмотра браузера), и если они отличаются, он сбрасывает cookie и перезагружает страницу. Код должен учитывать предпочтения пользователя. Если постоянные файлы cookie отключены, используйте файлы cookie сеанса. Если это не сработает, вам придется использовать настройку по умолчанию.
- Javascript: проверьте, установлены ли файлы cookie высоты и ширины
- Javascript: если установлено, проверьте, соответствует ли screen.height и screen.width (или что вы хотите) текущему значению файла cookie.
- Javascript: Если cookie не установлен или не соответствует текущему значению, то: a. Javascript: создайте постоянный или сеансовый файл cookie с именем (например) 'shw' для значения текущего screen.height и screen.width.
b. Javascript: перенаправление на СЕБЯ с помощью window.location.reload(). Когда он перезагрузится, он пропустит шаг 3. - PHP: $_COOKIE['shw'] содержит значения.
- Продолжить с 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"];
}
PHP работает только на стороне сервера, а не на хосте пользователя. Используйте JavaScript или jQuery, чтобы получить эту информацию и отправить через AJAX или URL (?x=1024&y=640).
Быстрый ответ - нет, тогда вы, вероятно, спросите, почему я не могу сделать это с помощью php. ОК, вот более длинный ответ. PHP — это серверный язык сценариев, поэтому он не имеет ничего общего с типом конкретного клиента. Затем вы можете спросить: «Почему я могу получить агент браузера из php?», Это потому, что эта информация отправляется с начальными заголовками HTTP по запросу на сервер. Поэтому, если вам нужна информация о клиенте, которая не отправляется с заголовком HTTP, вы должны использовать клиентский язык сценариев, такой как javascript.
Чтобы получить ширину экрана или высоту экрана
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 );
В 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)