9

PHP は IP、ホスト名、クライアント エージェントなどを検出できます。PHP はクライアント ブラウザのモニター サイズ/解像度を検出できますか?

4

8 に答える 8

25

いいえ、できません。PHP はサーバー上で実行されるため、特定のクライアント側の手順を実行してサーバー上の PHP スクリプトに情報を渡さない限り、クライアント設定を検出できません。

于 2009-05-21T09:34:48.297 に答える
4

次の例のように、JavaScript と一緒に PHP を使用する必要があります。

$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 は 1 つの代替手段です。

resolution以下の例は、HTTP リクエストで渡される変数をチェックする PHP ページです。その変数が見つからない場合は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

一部の人々は、モバイル開発のためにブラウザーのサイズを必要とします。これは場合によっては重要な情報です。

ほとんどのモバイルは JS をサポートしていないため、WURFL と WALL を使用するとこれを回避できます。

于 2009-10-29T15:24:47.327 に答える
0

JS はブラウザーのウィンドウ サイズを確認できますが、このサイズにはユーザー ツールバー、スクロールバーなどが含まれることに注意してください。ブラウザーの実際のワークスペース領域は、これらのツールバーのサイズによって異なります。

于 2009-05-21T11:46:40.603 に答える
0

JS を使用してモニターのサイズを取得することはできません。ポーリングを行う必要があります :)

于 2009-05-21T09:35:55.190 に答える