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 を読み取るために何かをエコーする必要があることを指摘しました。