2

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: @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 に答える