所以我目前正在编写一段行为相当愚蠢的代码。
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。
我知道以这种方式做事的陷阱,但不幸的是,这是遗留代码,并且由于各种原因必须以这种方式完成。
有人有什么想法吗?
最佳答案
在 PHP 中不可能得到这样的屏幕宽度,正如 @MagnusEriksson 也提到的,PHP 是在服务器上运行的。在评估您的 PHP 代码时,屏幕尺寸是未知的。 javascript
运行在客户端,它可以检测屏幕尺寸,因为屏幕是客户端的一个对象。 PHP 永远无法知道屏幕的大小,因为它是在服务器上运行的,而服务器上没有屏幕(或者至少没有正确的屏幕)。
让 PHP 知道客户端屏幕大小的唯一方法是使用 javascript 计算它,然后使用 ajax
或以屏幕大小作为参数的重定向来传递该值 link.php?screensize=xxx
在当前代码中,您已经将 javascript 变量解析为 int。这对于 javascript 变量来说效果很好(如下所示: http://jsfiddle.net/j47k01jt/ )。
关于javascript - 无法从 PHP 中的字符串转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33482082/