1

(のように)完全なURLを使用してページを含めると、 inをinclude 'http://mysite.tld/mypage.php'使用できず、エラーが返されます。$GLOBALSmypage.phpUndefined index

ただし、相対パス(のようにinclude 'mypage.php')を使用して含めると、問題ありません。

$_GET相対パスの代わりにURLを使用している理由は、mypage.php

この奇妙な行動の論理的な説明はありますか?


両方のファイルが同じサーバーの同じディレクトリにあることに注意してください。

4

1 に答える 1

1

URLにファイルを含めることは、コードが別のプロセスとして実行されることを意味します。つまり、異なる可変スコープで実行されることを意味します。これは、相対パスを介してファイルを含める場合とは対照的です。この場合、コードを切り取ってスクリプトに貼り付けるのとほぼ同じです。

基本的に、これは、開始スクリプトから使用できる変数は、明示的に渡す変数のみであることを意味します(この場合は$_GET変数を使用しているため)。$_SESSION呼び出し元はクライアントではなく独自のサーバーであるため、これには変数が含まれます。

この動作は、PHPマニュアルのincludeページに記載されています。

ターゲットサーバーがターゲットファイルをPHPコードとして解釈する場合、HTTP GETで使用されるURL要求文字列を使用して、変数がインクルードされたファイルに渡される場合があります。これは、厳密に言えば、ファイルを含めて親ファイルの可変スコープを継承させることと同じではありません。スクリプトは実際にはリモートサーバーで実行されており、結果はローカルスクリプトに含まれています。

于 2012-07-20T04:50:55.113 に答える