2

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

以下是相关代码:

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

编辑:当我没有在页面上的某处回显它时,我将扩展我如何知道 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 。

4

3 回答 3

1

难道你没有在这里发生某种奇怪的循环:

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

它重定向回 index.php:

header("Location: http://www.example.com/?location=$location");

回声只是打破了重定向

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

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

里面有类似的东西:

print_r($_REQUEST);

走着瞧吧

于 2013-08-01T20:39:49.970 回答
1

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

于 2013-08-01T19:46:50.163 回答
0

尝试添加

global $location;

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

于 2013-08-01T19:45:56.517 回答