可以php检测客户端浏览器监控大小/分辨率?

时间:2009-05-21 09:30:31

标签: php resolution detect

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

8 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:5)

请注意我们中的一些人喜欢我们的浏览器非最大化。也许你最好不要试图检测浏览器大小而不是屏幕分辨率。我认为JS要么做得非常相似,但我实际上并不知道情况就是这样。

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

答案 2 :(得分:4)

您必须将PHP与JavaScript结合使用,例如this example

$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>");

答案 3 :(得分:2)

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

以下示例是一个PHP页面,用于检查HTTP请求中传递的resolution变量。如果它没有找到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并需要重定向。不过,它可能会激励某人发布更好的答案。仅供参考,信用到期,这个答案的灵感来自this post

答案 4 :(得分: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>

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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