PHP变量被视为空,除非它被回显

时间:2013-08-01 19:42:11

标签: php

我在名为index.php的页面上定义了一个变量$ location,然后在我在名为loginManager.php的脚本中设置标头时使用它。如果我只是使用$ location PHP坚持认为它是空的。但是,如果我在页面的任何位置回显变量,它将识别变量的内容。

以下是相关代码:

的index.php:

$location = $_SERVER['REQUEST_URI'];
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/loginManager.php");

loginManager.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会以这种方式运行?

编辑: 我将扩展我如何知道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:编辑#2: @ jx12345指出,它不是特定的$ location需要回应,只需要回显一些东西,以便读取$ location。

3 个答案:

答案 0 :(得分:1)

我认为您的问题可能是重定向循环。我打赌$_POST['caller']为空,您将多次重定向到/,然后将REQUEST_URI设置为空白。

答案 1 :(得分:1)

你有没有发生某种奇怪的循环:

index.php加载“/lib/loginManager.php”

使用:

重定向回index.php
header("Location: http://www.example.com/?location=$location");

echo只会破坏重定向

尝试重定向到其他地方,比如test.php

header("Location: http://www.test.co.uk/test.php?location=$location");

并且在那里有类似的东西:

print_r($_REQUEST);

看看会发生什么

答案 2 :(得分:0)

尝试添加

global $location;

在loginManager.php的顶部附近,如果存在应该处理的可变范围问题。