PHPを使用して画面解像度を取得する
-
19-09-2019 - |
質問
私の Web サイトにアクセスするユーザーの画面の解像度を確認する必要がありますか?
解決
純粋な PHP ではそれを行うことはできません。JavaScript を使用して実行する必要があります。これを行う方法についてはいくつかの記事が書かれています。
基本的に、Cookie を設定したり、Ajax を使用して情報を PHP スクリプトに送信したりすることもできます。jQuery を使用する場合は、次のように実行できます。
jクエリ:
$(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"));
}
?>
これらはすべて本当に基本的なことですが、必ずどこかに到達できるはずです。ただし、通常、画面解像度は実際に必要なものではありません。実際のブラウザのビュー ポートのサイズに興味があるかもしれません。それは実際にページがレンダリングされる場所だからです。
他のヒント
直接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
ユーザーとして言えば、どんな画面解像度でも柔軟に処理できるサイトを設計していただきたいと思います。さまざまなサイズのウィンドウで閲覧していますが、ほとんど最大化されていません。
これは非常に単純なプロセスです。はい、あなたは、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:私は、あなたが実行できるテストを持っています
の JavaScriptを使用(screen.width
とscreen.height
IIRCが、私は間違っている可能性があり、しばらくJSを行っていません)。 PHPはそれを行うことはできません。
私は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または類似を使用して、任意のVARSを渡すので、必要はありません。
あなたはRESS(応答デザイン+サーバ側コンポーネント)を試すことができ、このチュートリアルを参照してください。
私はあなたが純粋に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モバイルの検出
完全に動作する例
実際に動作する PHP サンプルが見つかりませんでした 「目に見えない」 (URLパラメータなし) クライアントの画面サイズを返す, 、およびその他のプロパティをサーバー側の PHP に送信するため、この例をまとめました。
JS は、(JS プロパティの配列から PHP によってスクリプト化された) 隠しフォームにデータを入力して送信します。 POST
それ自体 (PHP で現在利用可能なデータ) に ing を実行し、テーブル内のデータを返します。
(「いくつかの」ブラウザでテストされました。)
<!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 を変数に入れます。例えば:
window.innerWidth
で返されます$windowinnerWidth
唯一の方法は、JavaScriptを使用して(あなたが本当にサーバー側がresは必要な場合)、その後JavaScriptがPHPにそれを投稿してもらうことです。彼らはJavaScriptをオフにした場合しかしこれはcompletly、その顔に平らに落ちるます。
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'];
これは Cookie を使用して簡単に実行できます。このメソッドを使用すると、ページは保存されている Cookie の値を画面の高さと幅 (またはブラウザのビュー ポートの高さと幅の値) と照合して確認でき、それらが異なる場合は Cookie をリセットしてページをリロードします。コードではユーザーの好みを考慮する必要があります。永続的な Cookie がオフになっている場合は、セッション Cookie を使用します。それが機能しない場合は、デフォルト設定を使用する必要があります。
- JavaScript:高さと幅のクッキーが設定されているかどうかを確認する
- JavaScript:設定されている場合は、screen.height と screen.width (または任意の値) が Cookie の現在の値と一致するかどうかを確認します。
- JavaScript:Cookie が設定されていない場合、または現在の値と一致しない場合は、次のようになります。a.JavaScript:現在の screen.height と screen.width の値に (例)「shw」という名前の永続的またはセッション Cookie を作成します。
b.JavaScript:window.location.reload() を使用して SELF にリダイレクトします。リロードすると、手順 3 がスキップされます。 - PHP:$_COOKIE['shw'] には値が含まれています。
- 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"];
}
あなたは、フロントエンドでJSを使用してクッキーにウィンドウ幅を設定することができますし、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'];
?>
迅速な答えは、私はPHPでそれを行うことができない理由を、あなたはおそらく求めている、いないです。 OKここに長い答えがあります。 PHPはサーバーサイドのスクリプト言語であり、そのためには、特定のクライアントの種類とは何の関係もありません。その情報がサーバーに要求に応じて、最初のHTTPヘッダで送信されるため、あなたは「なぜ私は、PHPからブラウザエージェントを得ることができますか?」頼むかもしれない、thatsの。だから、HTTPヘッダで送信されていないクライアント情報が必要な場合は、あなた必要がありますJavaScriptのようなクライアントスクリプト言語ます。
PHP には、この情報を取得する標準的な方法はありません。ただし、サードパーティのソリューションを使用している場合は可能です。PHP 用の 51Degrees デバイス検出器には、必要なプロパティがあります。
ユーザーの画面の幅と高さをピクセル単位で示します。これらのプロパティを使用するには、次から検出器をダウンロードする必要があります。 ソースフォージ. 。次に、画面の高さと幅を検出する必要があるファイルに次の 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.
?>
デバイスを識別できない場合、これらの変数には「不明」値が含まれる場合があることに注意してください。
ソリューション:整形はクライアント側を行わなければならないと私は情報がサーバに渡されますが、詳細はまだどのように多くのオブジェクトごとに(便利です希望でした(私たちは、私は適切なWebデザインを言う必要があります)...スケーラブルなWebデザインを作ります行取引の一種)が、依然としてウェブデザインは、各行の要素は、その実際のテーブルない限り、テーブルに置くべきではありません(と、それは個々のセルだとデータが調整されますので、流動性でなければならない)あなたはdiv要素を使用する場合は、隣の各要素を積み重ねることができます互いに自分のウィンドウが適切な場所で行を「壊す」必要があります。 (ちょうど適切なCSSを必要とする)
PHPはサーバー側ではなく、ユーザーのホスト上で動作します。この情報を取得し、AJAXまたはURL(?X = 1024&Y = 640)を経由して送信するためにJavaScriptやjQueryのを使用します。
最も簡単な方法
<?php
//-- you can modified it like you want
echo $width = "<script>document.write(screen.width);</script>";
echo $height = "<script>document.write(screen.height);</script>";
?>
<script type="text/javascript">
if(screen.width <= 699){
<?php $screen = 'mobile';?>
}else{
<?php $screen = 'default';?>
}
</script>
<?php echo $screen; ?>