当我包含一个使用其完整URL的页面(如include 'http://mysite.tld/mypage.php'
)时,我不能在mypage.php
中使用$GLOBALS
,它会返回Undefined index
错误。
但当我使用它的相对路径(如include 'mypage.php'
)包含它时,它就可以了
我之所以使用URL而不是相对路径,是因为我想在mypage.php
中包含$_GET
参数
这种奇怪的行为有什么合乎逻辑的解释吗?
请注意,这两个文件位于同一服务器上的同一目录中
包含带有URL的文件意味着代码作为一个单独的进程运行,这意味着它在不同的变量范围下运行。这与通过相对路径包含文件相反,在这种情况下,这相当于将代码剪切并粘贴到脚本中。
从本质上讲,这意味着启动脚本中唯一可用的变量是显式传递的变量(在本例中使用$_GET
变量)。这包括$_SESSION
变量,因为调用者是您自己的服务器而不是客户端。
PHP手册的include
页面中注意到了这种行为:
如果目标服务器将目标文件解释为PHP代码可以使用所使用的URL请求字符串传递到包含的文件使用HTTP GET。严格来说,这与包括文件并使其继承父文件的变量范围脚本实际上是在远程服务器上运行的然后将结果包括在本地脚本中。