使用PHP获取屏幕分辨率
我需要find访问我的网站的用户屏幕的屏幕分辨率?
你不能用纯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")); } ?>
所有这一切都是非常基本的,但它应该让你在某个地方。 通常屏幕分辨率不是你真正想要的。 您可能会更感兴趣的实际浏览器的视图的大小,因为这实际上是页面呈现的位置…
直接与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告诉你他们的屏幕分辨率是多less。 写一个小脚本发送给你screen.width和screen.height – 可能通过AJAX,或者更有可能与一个初始的“跳转页面”find它,然后redirect到http://example.net/index.php?size= AXB
虽然作为用户发言,我更喜欢你devise一个网站stream畅地处理任何屏幕分辨率。 我浏览不同大小的窗户,大多不是最大化。
使用JavaScript( screen.width
和screen.height
IIRC,但我可能是错误的,有一段时间没有做JS)。 PHP不能做到这一点。
我发现在我的PHP里面我的PHP使用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>'; ?>
如果屏幕是480像素或更less,这将输出一个更小的标题。 所以不需要通过使用JS或类似的任何variables。
您可以尝试RESS(响应式devise+服务器端组件),请参阅本教程:
唯一的方法是使用JavaScript,然后获取JavaScript发布到您的PHP(如果你真的需要有res服务器端)。 如果他们把javascriptclosures的话,这将完全落在它的脸上。
我不认为你可以纯粹用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
在PHP中没有标准的方式来获取这些信息。 但是,如果您使用的是第三方解决scheme,则有可能。 用于PHP的51Degrees设备检测器具有您需要的属性:
- $ _51d [ 'ScreenPixelsHeight']
- $ _51d [ 'ScreenPixelsWidth']
以像素为单位给出用户屏幕的宽度和高度。 为了使用这些属性,你需要从sourceforge下载探测器。 然后,您需要在文件/文件中包含以下两行,以检测屏幕高度和宽度:
<?php require_once 'path/to/core/51Degrees.php'; require_once 'path/to/core/51Degrees_usage.php'; ?>
其中path / to / core是从Sourceforge下载的“Core”目录的path。 最后,要使用这些属性:
<?php echo $_51d['ScreenPixelsHeight']; //Output screen height. echo $_51d['ScreenPixelsWidth']; //Output screen width. ?>
请记住,当设备无法识别时,这些variables可能会包含“未知”值。
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被closures,请使用会话cookie。 如果这不起作用,你必须使用默认设置。
- Javascript:检查高度和宽度Cookie设置
- Javascript:如果设置,请检查screen.height&screen.width(或任何你想要的)匹配cookie的当前值
- Javascript:如果cookie没有设置,或者与当前值不匹配,则:a。 Javascript:创build持久性或会话cookie,命名(例如)“shw”为当前screen.height&screen.width的值。
湾 Javascript:使用window.location.reload()redirect到SELF。 重新加载时,将跳过第3步。 - PHP:$ _COOKIE ['shw']包含值。
- 继续使用PHP
例如,我正在使用网上find的一些常见的cookiefunction。 确保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"]; }
解决scheme:使可伸缩的网页devise…(我应该说适当的网页devise)格式化应该做客户端,我希望信息将传递到服务器,但信息仍然有用(每行多less个对象交易),但仍然网页devise应该是stream动的,因此每行元素不应该被放入表中,除非它的实际表(和数据将扩展到它的单个单元格),如果你使用一个div,你可以堆叠每个元素彼此相邻和你的窗户应该在适当的位置“打破”这一行。 (只需要适当的CSS)
PHP只能在服务器端工作,而不能在用户主机上工作。 使用JavaScript或jQuery获取此信息并通过AJAX或URL(?x = 1024&y = 640)发送。
<script type="text/javascript"> if(screen.width <= 699){ <?php $screen = 'mobile';?> }else{ <?php $screen = 'default';?> } </script> <?php echo $screen; ?>