使用PHP获取屏幕分辨率

时间:2009-10-01 14:57:48

标签: php server client resolution detect

我需要找到访问我网站的用户界面的屏幕分辨率吗?

23 个答案:

答案 0 :(得分:53)

使用纯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"));
}
?>

所有这些都是非常基本但它应该让你到达某个地方。通常屏幕分辨率不是你真正想要的。您可能对实际浏览器的视图端口的大小更感兴趣,因为这实际上是页面呈现的位置...

答案 1 :(得分:25)

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

答案 2 :(得分:19)

PHP是服务器端语言 - 它仅在服务器上执行,并且生成的程序输出被发送到客户端。因此,没有“客户屏幕”信息可用。

也就是说,您可以让客户通过JavaScript告诉您他们的屏幕分辨率。写一个小小脚本给你发送screen.width和screen.height - 可能是通过AJAX,或者更可能是找到它的初始“跳转页面”,然后重定向到http://example.net/index.php?size=AxB

虽然以用户身份发言,但我更倾向于设计一个网站以流畅地处理任何屏幕分辨率。我浏览不同大小的窗口,大多数都没有最大化。

答案 3 :(得分:4)

我发现在我的html里面使用CSS我的php为我做了诀窍。

<?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 :(得分:4)

使用JavaScript(screen.widthscreen.height IIRC,但我可能错了,一段时间没有完成JS)。 PHP无法做到。

答案 5 :(得分:2)

您可以尝试RESS(RESponsive设计+服务器端组件),请参阅本教程:

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

答案 6 :(得分:1)

我不认为您可以完全使用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

答案 7 :(得分:1)

这是一个非常简单的过程。是的,你无法在PHP中获得宽度和高度。确实,JQuery可以提供屏幕的宽度和高度。首先转到https://github.com/carhartl/jquery-cookie并获取jquery.cookie.js。这是使用php获取屏幕宽度和高度的示例:

const

我有一个可以执行的测试:http://rw-wrd.net/test.php

答案 8 :(得分:0)

这可以使用cookie轻松完成。此方法允许页面根据屏幕高度和宽度(或浏览器视图端口高度和宽度值)检查存储的cookie值,如果它们不同,它将重置cookie并重新加载页面。代码需要允许用户首选项。如果关闭持久性cookie,请使用会话cookie。如果这不起作用,则必须使用默认设置。

  1. Javascript:检查身高和身高宽度cookie集
  2. Javascript:如果设置,请检查screen.height&amp; screen.width(或任何你想要的)匹配cookie的当前值
  3. Javascript:如果未设置cookie或与当前值不匹配,则:  一个。 Javascript:创建名为(例如)'shw'的持久性或会话cookie到当前screen.height&amp;的值。 screen.width。
     湾Javascript:使用window.location.reload()重定向到SELF。重新加载时,它将跳过步骤3.
  4. PHP:$ _COOKIE ['shw']包含值。
  5. 继续PHP
  6. 例如,我正在使用网络上的一些常见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"];
    }
    

答案 9 :(得分:0)

获取宽屏或高屏
1- 创建一个 PHP 文件 (getwidthscreen.php) 并在其中写入以下命令
PHP (getwidthscreen.php)

<div id="widthscreenid"></div>
<script>
document.getElementById("widthscreenid").innerHTML=screen.width;
</script>

2- 通过以下命令通过 cURL 会话获取宽度屏幕
PHP (main.php)

$ch = curl_init( 'http://hostname/getwidthscreen.php' );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$result = curl_exec( $ch );
print_r($result);
curl_close( $ch );

答案 10 :(得分:0)

您可以按以下方式检查它:

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'mobile') || strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'android')) {
   echo "mobile web browser!";
} else {
echo "web browser!";
}

答案 11 :(得分:0)

这是Javascript代码:(index.php)

<script>
    var xhttp = new XMLHttpRequest();  
    xhttp.open("POST", "/sqldb.php", true);
    xhttp.send("screensize=",screen.width,screen.height);
</script>

这是PHP代码:(sqldb.php)

$data = $_POST['screensize'];
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$statement = $pdo->prepare("UPDATE users SET screen= :screen WHERE id = $userid");
$statement->execute(array('screen' => $data));

我希望您知道如何从Session中获取$ userid, 为此,您需要一个数据库,该数据库的表称为用户,用户内部的表称为screen; =) 关于KSP

答案 12 :(得分:0)

快速答案是“否”,那么您可能会问为什么我不能使用php做到这一点。好的,这是一个更长的答案。 PHP是一种服务器端脚本语言,因此与特定客户端的类型无关。然后您可能会问“为什么要从php获取浏览器代理?”,那是因为该信息是在请求服务器时随初始HTTP标头一起发送的。因此,如果您希望不使用HTTP标头发送客户端信息,则必须使用javascript之类的客户端脚本语言。

答案 13 :(得分:0)

完整的工作示例

我找不到实际的工作PHP示例来“无形地” (没有URL参数)将客户端屏幕尺寸和其他属性返回到服务器端PHP ,所以我把这个例子放在一起了。

JS填充并提交一个隐藏的表单(由PHP从JS属性数组中脚本化),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

答案 14 :(得分:0)

最简单的方法是:

$width = "<script>var windowWidth = screen.width; document.writeln(windowWidth); </script>";
$height = "<script>var windowHeight = screen.height; document.writeln(windowHeight); </script>"; 

echo 'This screen is : '.$width.' x '.$height;

答案 15 :(得分: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'];

答案 16 :(得分:0)

唯一的方法是使用javascript,然后获取javascript发布到你的PHP(如果你真的需要res服务器端)。然而,如果它们关闭javascript,它将完全落在脸上。

答案 17 :(得分:-1)

解决方案:制作可扩展的网页设计......(我们应该说适当的网页设计)格式化应该在客户端进行,我确实希望信息传递到服务器但信息仍然有用(每个对象有多少)行类型的交易)但仍然网页设计应该是流动的,因此每个行元素不应该放入表中,除非它是一个实际的表(并且数据将扩展到它的单个单元格)如果你使用div你可以堆栈每个元素彼此相邻,你的窗口应该&#34;打破&#34;在适当的位置排。 (只需要适当的CSS)

答案 18 :(得分:-1)

您可以在前端使用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'];
?>

答案 19 :(得分:-1)

最简单的方法

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

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

?>

答案 20 :(得分:-1)

在PHP中,没有标准的方法来获取此信息。但是,如果您使用的是第三方解决方案,则可能。适用于PHP的51Degrees设备检测器具有您需要的属性:

以像素为单位显示用户屏幕的宽度和高度。要使用这些属性,您需要从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.
?>

请记住,当设备无法识别时,这些变量可能会包含“未知”值。

答案 21 :(得分:-1)

PHP仅适用于服务器端,而不适用于用户主机。使用JavaScript或jQuery获取此信息并通过AJAX或URL发送(?x = 1024&amp; y = 640)。

答案 22 :(得分:-3)

<script type="text/javascript">

if(screen.width <= 699){
    <?php $screen = 'mobile';?>
}else{
    <?php $screen = 'default';?>
}

</script>

<?php echo $screen; ?>