我在名为index.php 的页面上定义了一个变量$location,然后在名为loginManager.php 的脚本中设置 header 时使用它。如果我只是使用 $location PHP 坚持认为它是空的。但是,如果我在页面上的任何位置回显该变量,它将识别该变量的内容。
相关代码如下:
index.php:
$location = $_SERVER['REQUEST_URI'];
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/loginManager.php");
登录管理器.php:
header("Location: http://www.example.com/?location=$location");
echo $location;//Adding this line allows PHP to read the contents of $location.
//If this line is commented out PHP treats it as if it were empty.
loginManager.php 上运行的代码不在函数中,也不在任何会导致 $location 作用域问题的地方。有谁知道为什么 PHP 会有这样的行为吗?
编辑: 当我不在页面上的某个地方回显 $location 时,我将详细说明如何知道 PHP 认为 $location 为空。
如果我做类似的事情:
If(empty($location))
echo "location is empty";
else
print "location is not empty";
PHP 将打印出“位置为空”。
但是,如果我这样做
echo $location;
If(empty($location))
echo "location is empty";
else
print "location is not empty";
PHP 将打印出“位置不为空”。我在哪里回显 $location 似乎并不重要。
编辑#2: @jx12345 指出,并不是 $location 特别需要回显,只是需要回显某些内容才能读取 $location。
最佳答案
我认为您的问题可能是重定向循环。我敢打赌 $_POST['caller']
为空,并且您多次重定向到 /
,然后将 REQUEST_URI 设置为空白。
关于PHP 变量被视为空,除非它被回显,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003112/