9

php可以检测IP、主机名、客户端代理等。php可以检测客户端浏览器监视器的大小/分辨率吗?

4

8 回答 8

25

不,它不能。PHP 在服务器上运行,因此它无法检测客户端设置,除非您采取特定的客户端步骤将信息传递给服务器上的 PHP 脚本。

于 2009-05-21T09:34:48.297 回答
5

请注意,我们中的一些人喜欢我们的浏览器未最大化。也许您最好尝试检测浏览器大小而不是屏幕分辨率。我认为要执行的 JS 将非常相似,但我实际上并不知道会是这种情况。

另外,盲人的屏幕阅读器的分辨率是多少?

于 2009-05-21T09:53:02.597 回答
4

您必须将 PHP 与 JavaScript 一起使用,如下例所示

$url = $_SERVER['PHP_SELF'];

if( isset($HTTP_COOKIE_VARS["res"]) )
    $res = $HTTP_COOKIE_VARS["res"];

else {
    ?>
    <script language="javascript">
    <!--
    go();

    function go() 
    {
        var today = new Date();
        var the_date = new Date("August 31, 2020");
        var the_cookie_date = the_date.toGMTString();
        var the_cookie = "res="+ screen.width +"x"+ screen.height;
        var the_cookie = the_cookie + ";expires=" + the_cookie_date;
        document.cookie=the_cookie
            location = '<?echo "$url";?>';
    }
    //-->
    </script>
    <?php
}

//Let's "split" the resolution results into two variables
list($width, $height) = split('[x]', $res);

//Take the width and height minus 300
$tb_width = $width-300;
$tb_height = $height-300;

//Make the table
print("<table align=center border=1 width=" .$tb_width . " height=" . $tb_height . " >
    <tr><td align=center>Your screen resolution is " . $width . " by " . $height . ".<br>
    The width/height of this table is " . $tb_width . " by " . $tb_height . ".</td></tr>
    </table>");
于 2009-05-21T09:33:52.400 回答
2

我也在寻找这个,但发现这些答案都没有真正回答这个问题!事实上,PHP 无法知道屏幕分辨率,因为它是在服务器端运行的。由于该信息未在 HTTP 环境变量中传递,因此我们需要另一个路由。Javascript 是一种选择。

下面的示例是一个 PHP 页面,用于检查resolutionHTTP 请求中传递的变量。如果它没有找到那个resolution变量,那么它会在页面上创建一个简短的 JavaScript 代码,将那个变量和高度和宽度传递给重定向回它自己。当然,当页面在重定向后再次加载时,所有变量都会被设置,PHP 会知道分辨率。

<?php
    if(!isset($_GET['resolution'])) {     
        echo "<script language=\"JavaScript\">     
<!--      
    document.location=\"$PHP_SELF?resolution=1&width=\"+screen.width+\"&height=\"+screen.height;     
//-->     
</script>";     
    } else {
        // Code to be displayed if resolution is detected     
        if(isset($_GET['width']) && isset($_GET['height'])) {     
            echo "Width: " . $_GET['width'] . " and Height: " . $_GET['height'] . "<br />";
        } else {     
            echo "Resolution not detected.";
        }     
    }
?>

最后我发现这是一个非常不令人满意的解决方案。它可以工作,但很丑陋,会在 URL 中添加杂乱无章的内容并需要重定向。不过,它可能会激发某人发布更好的答案。仅供参考,信用到期,这个答案受到这篇文章的启发。

于 2012-11-27T17:25:04.713 回答
2

我知道这不是最好的答案,所以不要投反对票。

<script>
/*
    JAVASCRIPT IS ON TELL THE DEVELOPER#
*/
// GET BROWSER WIDTH AND HEIGHT
var bh=screen.height;
var bw=screen.width;
window.location="?doSubmit=do&js=yes&bh="+bh+"&bw="+bw+"";
</script>

<noscript>
    <!--
        JAVASCRIPT IS OFF TELL THE DEVELOPER#
    -->
    <meta http-equiv='refresh' content='0;url=?doSubmit=do&js=off&bh=off&bw=off'>

</noscript>

<?

if($_GET["doSubmit"]=="do"){

    // VARS

        $bh=$_GET["bh"];
        $bw=$_GET["bw"];
        $js=$_GET["js"];

    // PRINT HTML ?>

<table>

    <tr><td><strong>Browser Width:</strong></td><td><?=$bw;?>px</tr>
    <tr><td><strong>Browser Height:</strong></td><td><?=$bh;?>px</tr>
    <tr><td><strong>JavaScript Detection (y/n):</strong></td><td><?=$js;?></tr>

</table>
于 2013-12-10T12:37:07.683 回答
1

有些人需要浏览器大小来进行移动开发。在某些情况下,这是必不可少的信息。

使用 WURFL 和 WALL 可以解决这个问题,因为大多数手机不支持 JS。

于 2009-10-29T15:24:47.327 回答
0

使用JS无法获取监视器大小,您必须进行投票:)

于 2009-05-21T09:35:55.190 回答
0

请注意,JS 可以检查浏览器的窗口大小,但这个大小包括用户工具栏、滚动条等。浏览器中的实际工作区区域取决于这些工具栏的大小。

于 2009-05-21T11:46:40.603 回答