web-dev-qa-db-ja.com

PHPを使用して画面解像度を取得する

ウェブサイトにアクセスするユーザー画面の画面解像度を見つける必要がありますか?

43
Roland

純粋な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"));
}
?>

それは本当に基本的なことですが、どこかに行くはずです。通常、画面の解像度はあなたが本当に望むものではありません。ページが実際にレンダリングされる場所であるため、実際のブラウザのビューポートのサイズに興味があるかもしれません...

55
KyleFarris

直接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>';
}
?>

PHPはサーバー側の言語です。サーバー上でのみ実行され、結果のプログラム出力がクライアントに送信されます。そのため、利用可能な「クライアント画面」情報はありません。

ただし、JavaScriptを使用して、クライアントに画面の解像度を伝えることができます。小さなスクリプトレットを作成して、screen.widthとscreen.heightを送信します。AJAXを使用するか、最初の「ジャンプページ」でそれを見つけて http://example.net/index。 php?size = AxB

ユーザーとしては話していますが、画面解像度をスムーズに処理できるサイトを設計することをお勧めします。さまざまなサイズのウィンドウでブラウズしますが、ほとんどは最大化されていません。

19
Adam Wright

これは非常に簡単なプロセスです。はい、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

5
Rich R

私の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などを使用して変数を渡す必要はありません。

4
delp

JavaScript(screen.widthおよびscreen.height IIRC、しかし私は間違っているかもしれません、しばらくの間JSをしていません。 PHPはできません。

4
Cat Plus Plus

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

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

2
benske

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

1
davidcondrey

完全に機能する例

実際の動作を見つけることができませんでしたPHPの例 "invisibly"(URLパラメーターなし)returnクライアント画面サイズ、およびその他のプロパティをサーバー側PHPに追加するため、この例をまとめます。

JSは、非表示フォーム(PHPによってスクリプト化)、それ自体へのPOSTing(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 into variablesです。例えば:

  • window.innerWidth$windowinnerWidthで返されます
1
ashleedawg

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'];
0
krówek

最も簡単な方法

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

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

?>
0
WebSon

フロントエンドの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'];
?>
0
Faisal Rehman

簡単な答えはノーです。おそらくあなたはなぜ私がPHPでそれをできないのかと尋ねているでしょう。ここで長い答えです。 PHPはサーバーサイドのスクリプト言語であり、特定のクライアントのタイプとは何の関係もありません。「phpからブラウザエージェントを取得する理由は何ですか?」情報はサーバーへの要求時に初期HTTPヘッダーとともに送信されるため、HTTPヘッダーと共に送信されないクライアント情報が必要な場合は、javascriptなどのクライアントスクリプト言語を使用する必要があります。

PHPこの情報を取得する標準的な方法はありません。ただし、サードパーティのソリューションを使用している場合は可能です。PHP has必要なプロパティ:

ユーザーの画面の幅と高さをピクセル単位で提供します。これらのプロパティを使用するには、検出器を 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.
?>

これらの変数には、デバイスを識別できなかったときに「不明」な値が含まれることがあることに注意してください。

0
Mike

これは、Cookieを使用して簡単に実行できます。このメソッドにより、ページは保存されているCookieの値を画面の高さと幅(またはブラウザービューポートの高さと幅の値)でチェックし、異なる場合はCookieをリセットしてページをリロードします。コードは、ユーザー設定を許可する必要があります。永続的なCookieがオフになっている場合は、セッションCookieを使用します。それでもうまくいかない場合は、デフォルト設定を使用する必要があります。

  1. JavaScript:高さと幅のCookieが設定されているかどうかを確認します
  2. Javascript:設定されている場合、screen.heightとscreen.width(または必要なもの)がCookieの現在の値と一致するかどうかを確認します
  3. Javascript:Cookieが設定されていないか、Cookieが現在の値と一致しない場合、次のようにします。 Javascript:現在のscreen.heightとscreen.widthの値に「shw」という名前の永続またはセッションCookieを作成します。
    b。 Javascript:window.location.reload()を使用してSELFにリダイレクトします。リロードすると、ステップ3はスキップされます。
  4. PHP:$ _COOKIE ['shw']には値が含まれます。
  5. PHPに進む

例えば、私はウェブ上にあるいくつかの一般的なクッキー機能を使用しています。 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"];
}
0
user3236232

ソリューション:スケーラブルなWebデザインを作成します...(適切なWebデザインと言えば)クライアント側でフォーマットを行う必要があり、情報がサーバーに渡されることを望みましたが、情報はまだ有用です(行ごとのオブジェクト数しかし、Webデザインは流動的である必要があります。したがって、divを使用する場合、実際のテーブル(およびデータが個々のセルにスケーリングされる場合)を除いて、各行要素をテーブルに配置しないでくださいウィンドウは適切な場所で行を「分割」するはずです。 (適切なCSSが必要です)

0
Pere Noel

唯一の方法は、javascriptを使用してから、javascriptを取得してphpに投稿することです(サーバー側で本当に必要な場合)。ただし、javascriptをオフにすると、完全にフラットになります。

0
UK-AL

PHPはサーバー側でのみ機能し、ユーザーホストでは機能しません。 JavaScriptまたはjQueryを使用してこの情報を取得し、AJAXまたはURL(?x = 1024&y = 640)経由で送信します。

0
IProblemFactory