2009-10-01 143 views
35

我需要找到访问我的网站的用户屏幕的屏幕分辨率?使用PHP获取屏幕分辨率

+9

这是通过JavaScript,而不是PHP来完成的。 PHP只能在服务器端执行。虽然嗅探用户的屏幕分辨率,但请记住,并非所有用户都是全屏浏览! – sjstrutt 2009-10-01 15:03:19

+0

一种CSS设计渲染大小的方式:http://stackoverflow.com/questions/19186243/javascript-to-get-screen-width-in-php-variable – 2014-07-31 10:06:25

+0

使用JavaScript获取此信息并通过AJAX发送 – Elyor 2015-08-13 11:29:17

回答

51

你不能用纯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")); 
} 
?> 

所有这一切真的是基本的,但它应该让你到某个地方。通常屏幕分辨率不是你真正想要的。你可能会更感兴趣的是实际的浏览器的视口,因为它实际上是在页面呈现的大小...

+0

凯尔你找到了一种获取浏览器查看端口尺寸的方法吗? – 2012-09-18 17:33:10

+0

@KyleFarris ...我不是很好jQuery和json ..它将如何代码就像是波纹管 '$(function(){ $ .post('header.php',{width:800px },函数(JSON){ 如果(json.outcome == '成功'){ 头,800px.php //做可能是知识的东西 ?}其他{ 的header.php; }} ” json'); });' – 2013-11-26 03:32:26

+0

我不同意你关于视图的决议,但是,答案很好!我想这个信息可能用于统计和禁止。我更喜欢用户代理和IP。屏幕分辨率也不错! – volter9 2014-05-08 02:58:19

5

使用JavaScript(screen.widthscreen.height IIRC,但我可能是错的,有一段时间没有做过JS)。 PHP不能做到这一点。

1

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

0

PHP只能在服务器端工作,而不能在用户主机上工作。使用JavaScript或jQuery获取此信息并通过AJAX或URL发送(?x = 1024 & y = 640)。

+6

这将是?x = 1024&y = 640 – EFraim 2009-10-01 15:06:58

+0

我认为您需要使用&y而不是?y – 2017-10-30 15:52:10

20

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

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

尽管作为用户说话,更喜欢你设计一个网站来流畅地处理任何屏幕分辨率。我浏览了不同大小的窗户,大多数没有最大化。

+2

+1作为详细解释,而不是最大化您的浏览器窗口。我的浏览器窗口通常大约800像素宽;根据我的屏幕分辨率调整自己的网页是我存在的祸根! – 2009-10-01 15:06:37

23
用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>'; 
} 
?> 
+0

好的解决方案 - 实施并且效果很好。我也拉了http_user_agent(尽管它并不总是被填充/准确)。希望有一种方法可以获取实际的浏览器查看端口大小。 (而不是屏幕资源)。 – 2012-09-18 17:31:46

+0

我喜欢这个解决方案。简单 - 重定向到URL中大小的页面。对于阅读此内容的任何人 - 您可以获取浏览器视口大小 - 请参阅http://stackoverflow.com/questions/8794338其中说(使用jquery)使用.height()和.width()函数。 – Ukuser32 2016-02-24 17:02:41

+0

良好的解决方案,但请您可以为我们提供一个使用cookie而不是会话吗? – 2016-08-04 16:53:21

5

我发现在我的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或类似的任何变量。

+0

这不起作用 – 2016-08-04 16:57:01

3

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

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

+1

不应该是RDSSC?大声笑 – JorgeeFG 2013-07-02 14:26:14

+0

我已经更新它:响应式设计+服务器端组件:) – benske 2013-07-02 16:37:53

+0

链接已过时。请更新。 – sieppl 2014-10-22 11:04:12

1

我不认为你可以检测屏幕尺寸纯粹用PHP,但你可以检测用户 - 代理..

​​

这里有一个链接到一个更详细的脚本:PHP Mobile Detect

0

在PHP中没有斯坦达到这个信息的方法。但是,如果您正在使用第三方解决方案,则有可能。对于PHP 51Degrees设备探测器有你需要的属性:

为您提供了宽度和用户的像素屏幕的高度。为了使用这些属性,您需要从sourceforge下载检测器。然后,你需要包括以下两行的文件/文件,它是需要检测屏幕的高度和宽度:

<?php 
require_once 'path/to/core/51Degrees.php'; 
require_once 'path/to/core/51Degrees_usage.php'; 
?> 

其中path /到/核心的路径,你从SourceForge下载的“核心”目录。最后,使用性质:

<?php 
echo $_51d['ScreenPixelsHeight']; //Output screen height. 
echo $_51d['ScreenPixelsWidth']; //Output screen width. 
?> 

请记住这些变量可以包括“未知”的价值有些时候,当设备无法确定。

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']; 
1

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

  1. 的Javascript:检查高度&宽度设置cookie
  2. 的Javascript:如果设置,检查是否screen.height & screen.width(或任何你想要的)饼干
  3. 的Javascript的电流值相匹配:如果cookie未设置或与当前值不匹配,则: a。 Javascript:创建持久性或会话cookie,命名(例如)'shw'为当前屏幕的值。高亮& screen.width。 b。 Javascript:使用window.location.reload()重定向到SELF。当它重新加载时,它将跳过第3步。
  4. PHP:$ _COOKIE ['shw']包含值。
  5. 继续阅读关于本页PHP

例如,,我正在使用网上找到的一些常用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"]; 
} 
-2
<script type="text/javascript"> 

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

</script> 

<?php echo $screen; ?> 
+0

你不能在JavaScript中设置一个php变量。 – japetko 2016-10-13 10:50:00

+0

为了解释这个问题:首先php在服务器端执行ie。在到达浏览器之前,而JavaScript在到达浏览器后执行。 – reverbnation 2016-10-14 06:44:07

0

解决方案:使可扩展的网络设计......(我们应该怎么说呢适当的网页设计)格式化应该做的客户端,我也希望信息,将向下传递到服务器,但信息是仍然有用(每行有多少种对象)但仍然网页设计应该是流畅的,因此每个行元素都不应该被放入表格中,除非它的实际表格(和数据会缩放到它的单个单元格),如果您使用div您可以将每个元素堆叠在一起,并且窗口应该在合适的位置“断开”该行。 (只需要适当的CSS)