Мне нужно определить разрешение экрана пользователя, который посещает мой веб-сайт. Как это сделать?
Ответ 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