58

我需要找到访问我网站的用户屏幕的屏幕分辨率?

4

22 回答 22

67

你不能用纯 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"));
}
?>

所有这些都是非常基本的,但它应该能让你到达某个地方。通常,屏幕分辨率并不是您真正想要的。您可能对实际浏览器视口的大小更感兴趣,因为这实际上是呈现页面的位置...

于 2009-10-01T15:08:24.987 回答
32

直接使用 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>';
}
?>
于 2012-07-10T20:55:45.097 回答
19

PHP 是一种服务器端语言——它只在服务器上执行,并且生成的程序输出被发送到客户端。因此,没有可用的“客户端屏幕”信息。

也就是说,您可以让客户端通过 JavaScript 告诉您他们的屏幕分辨率是多少。编写一个小脚本向您发送 screen.width 和 screen.height - 可能通过 AJAX,或者更有可能使用找到它的初始“跳转页面”,然后重定向到http://example.net/index.php?size= AxB

虽然作为用户说话,但我更希望您设计一个能够流畅地处理任何屏幕分辨率的网站。我在不同大小的窗口中浏览,大部分都没有最大化。

于 2009-10-01T15:01:47.810 回答
6

我发现在我的 php 中的 html 中使用 CSS 对我有用。

<?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 或类似方法传递任何变量。

于 2012-07-24T09:23:08.087 回答
6

最简单的方法

<?php 
//-- you can modified it like you want

echo $width = "<script>document.write(screen.width);</script>";
echo $height = "<script>document.write(screen.height);</script>";

?>
于 2019-02-06T15:22:01.120 回答
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>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

于 2018-05-10T01:18:22.253 回答
3

使用 JavaScript(screen.widthscreen.heightIIRC,但我可能错了,有一段时间没做过 JS)。PHP 做不到。

于 2009-10-01T14:59:52.043 回答
3

完整的工作示例

我找不到一个实际工作的 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
于 2019-05-01T08:21:35.107 回答
3

你可以像下面这样检查它:

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'mobile') || strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'android')) {
   echo "mobile web browser!";
} else {
echo "web browser!";
}
于 2020-05-19T12:05:19.230 回答
2

你可以试试RESS(响应式设计+服务器端组件),看这个教程:

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

于 2013-07-02T14:11:49.857 回答
2

您可以在前端使用 JS 在 cookie 中设置窗口宽度,也可以在 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'];
?>
于 2018-08-31T07:36:35.260 回答
1

我不认为你可以纯粹用 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

于 2014-04-27T10:40:45.170 回答
1

这是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));

我希望您知道如何从 Session 中获取 $userid,为此您需要一个数据库,其中包含一个名为 users 的表,以及一个名为 screen 的用户表;=) 问候 KSP

于 2019-11-20T01:41:17.467 回答
0

唯一的方法是使用javascript,然后让javascript发布到你的php(如果你真的需要res服务器端)。但是,如果他们关闭 javascript,这将完全失败。

于 2009-10-01T15:00:44.710 回答
0

PHP 仅适用于服务器端,而不适用于用户主机。使用 JavaScript 或 jQuery 获取此信息并通过 AJAX 或 URL (?x=1024&y=640) 发送。

于 2009-10-01T15:01:19.997 回答
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'];
于 2014-09-28T16:45:00.770 回答
0

这可以使用 cookie 轻松完成。此方法允许页面根据屏幕高度和宽度(或浏览器视口高度和宽度值)检查存储的 cookie 值,如果它们不同,它将重置 cookie 并重新加载页面。代码需要允许用户偏好。如果关闭了持久性 cookie,请使用会话 cookie。如果这不起作用,您必须使用默认设置。

  1. Javascript:检查是否设置了高度和宽度 cookie
  2. Javascript:如果设置,检查 screen.height 和 screen.width(或任何你想要的)是否匹配 cookie 的当前值
  3. Javascript:如果 cookie 未设置或与当前值不匹配,则:Javascript:为当前 screen.height 和 screen.width 的值创建名为(例如)“shw”的持久性或会话 cookie。
    湾。Javascript:使用 window.location.reload() 重定向到 SELF。重新加载时,它将跳过第 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"];
}
于 2015-04-16T23:05:22.533 回答
0

快速回答是否定的,那么您可能会问为什么我不能用 php 做到这一点。好的,这是一个更长的答案。PHP 是一种服务器端脚本语言,因此与特定客户端的类型无关。然后你可能会问“为什么我可以从 php 获取浏览器代理?”,那是因为该信息是在向服务器请求时与初始 HTTP 标头一起发送的。因此,如果您想要不与 HTTP 标头一起发送的客户端信息,您必须使用客户端脚本语言,如 javascript。

于 2019-05-11T20:26:41.397 回答
0

获取宽度屏幕或高度屏幕
1- 创建一个 PHP 文件 (getwidthscreen.php) 并在其中写入以下命令
PHP (getwidthscreen.php)

<div id="widthscreenid"></div>
<script>
document.getElementById("widthscreenid").innerHTML=screen.width;
</script>

2- 通过以下命令PHP (main.php)通过 cURL 会话获取宽度屏幕

$ch = curl_init( 'http://hostname/getwidthscreen.php' );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$result = curl_exec( $ch );
print_r($result);
curl_close( $ch );
于 2021-04-03T11:37:21.380 回答
-1

在 PHP 中,没有标准的方法来获取这些信息。但是,如果您使用的是第 3 方解决方案,则有可能。PHP 的 51Degrees 设备检测器具有您需要的属性:

为您提供用户屏幕的宽度和高度(以像素为单位)。为了使用这些属性,您需要从sourceforge下载检测器。然后,您需要在需要检测屏幕高度和宽度的文件中包含以下 2 行:

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

其中 path/to/core 是您从 sourceforge 下载的“Core”目录的路径。最后,使用属性:

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

请记住,当无法识别设备时,这些变量有时可能包含“未知”值。

于 2014-08-07T11:13:18.603 回答
-1

解决方案:进行可扩展的网页设计......(我们应该说正确的网页设计)格式应该在客户端完成,我确实希望信息能够传递到服务器,但信息仍然有用(每行有多少对象交易)但网页设计仍然应该是流畅的,因此每个行元素不应该放入表格中,除非它是一个实际的表格(并且数据将缩放到它的单个单元格)如果你使用一个 div 你可以将每个元素堆叠在一起并且您的窗口应该在适当的位置“打破”该行。(只需要适当的CSS)

于 2016-09-24T08:34:59.123 回答
-3
<script type="text/javascript">

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

</script>

<?php echo $screen; ?> 
于 2016-08-06T16:11:12.950 回答