58

私の Web サイトにアクセスするユーザーの画面の画面解像度を調べる必要がありますか?

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 に答える
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>'; 

    ?>

画面が480px以下の場合、これにより小さいサイズの見出しが出力されます。したがって、JSなどを使用して変数を渡す必要はありません。

于 2012-07-24T09:23:08.087 に答える
3

JavaScript を使用します (screen.widthおよびscreen.heightIIRC ですが、私は間違っている可能性があります。しばらく JS を使用していません)。PHPはそれを行うことができません。

于 2009-10-01T14:59:52.043 に答える
3

完全に機能する例

クライアントの画面サイズやその他のプロパティを「目に見えない」方法で(URL パラメータなしで)サーバー側の PHP に返す、実際に動作する PHP の例が見つからなかったので、この例をまとめました。

JS は、非表示のフォーム (JS プロパティの配列から PHP によってスクリプト化されたもの) に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変数に変換されます。例えば:

  • window.innerWidthで返されます$windowinnerWidth
于 2019-05-01T08:21:35.107 に答える
2

RESS (レスポンシブ デザイン + サーバー側コンポーネント) を試すことができます。このチュートリアルを参照してください。

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

于 2013-07-02T14:11:49.857 に答える
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

これは、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 を作成します。
    b. Javascript: window.location.reload() を使用して SELF にリダイレクトします。リロードすると、ステップ 3 がスキップされます。
  4. PHP: $_COOKIE['shw'] には値が含まれます。
  5. PHPで続行

たとえば、Web で見られる一般的な 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

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 に答える
-1

解決策:スケーラブルなWebデザインを作成します...(適切なWebデザインと言うべきです)フォーマットはクライアント側で行う必要があり、情報がサーバーに渡されることを望みましたが、情報はまだ有用です(行ごとのオブジェクトの種類deal ) しかし、それでも Web デザインは流動的でなければならないため、実際のテーブルでない限り、各行要素をテーブルに入れるべきではありません (データは個々のセルに合わせてスケーリングされます)。ウィンドウは適切な場所で行を「分割」する必要があります。(適切な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 に答える