所以我目前正在编写一段相当愚蠢行为不端的代码。
function screenWidth($buffer)
{
global $widthTest;
$widthTest = $buffer;
}
ob_start("screenWidth");
$screenWidth = '<script type="text/javascript">document.write(parseInt(document.documentElement.clientWidth));</script>';
echo $screenWidth;
$width = ob_get_contents();
ob_end_clean();
echo $width;
echo $widthTest;
这会产生一个字符串,它给我屏幕宽度,没有javascript,这很棒。但是,出于某种原因,我无法将其转换为整数。
我错过了什么吗?我用纯文本运行它,它肯定会返回数字,而不仅仅是javascript。它存储为字符串,如果我尝试使用intval或(int)$ width进行转换;然后它每次都返回0。
我知道以这种方式做事的陷阱,但遗憾的是这是遗留代码,必须以这种方式完成,原因有很多。
有人有任何想法吗?
答案 0 :(得分:0)
不可能在PHP中获得这样的屏幕宽度,如@MagnusEriksson所述,PHP在服务器上运行。在评估PHP代码时,屏幕大小未知。 javascript
在客户端运行,可以检测屏幕大小,因为屏幕是客户端的对象。 PHP永远不会知道屏幕的大小,因为它在服务器上运行,而在服务器上没有屏幕(或者至少没有正确的屏幕)。
让PHP知道客户端屏幕大小的唯一方法是使用javascript计算它,然后使用ajax
或屏幕大小为参数{{1}的重定向传递值}
在当前代码中,您已经将javascript变量解析为int。这适用于javascript变量(可以在这里看到:http://jsfiddle.net/j47k01jt/)。