当我使用完整网址(例如include 'http://mysite.tld/mypage.php'
)添加网页时,我无法使用$GLOBALS
中的mypage.php
,它会返回Undefined index
错误。
但是当我使用它的相对路径(如include 'mypage.php'
)包含它时,那就没关系了。
我使用网址而不是相对路径的原因是我希望将$_GET
参数包含到mypage.php
对这种奇怪的行为有任何合理的解释吗?
<小时/> 请注意,这两个文件位于同一服务器上,位于同一目录中。
答案 0 :(得分:1)
包含带有URL的文件意味着代码作为单独的进程运行,这意味着它在不同的变量范围内运行。这与通过相对路径包含文件相反,在这种情况下,它几乎等同于将代码剪切并粘贴到脚本中。
基本上这意味着您的起始脚本中唯一可用的变量是您明确传递的变量(在本例中使用$_GET
变量)。这包括$_SESSION
变量,因为调用者是您自己的服务器而不是客户端。
在PHP手册的include
页面中注明了这种行为:
如果目标服务器将目标文件解释为PHP代码,则变量 可以使用所使用的URL请求字符串将其传递给包含的文件 使用HTTP GET。严格来说,这并不是一回事 包括文件并让它继承父文件的变量 范围;该脚本实际上是在远程服务器上运行的 然后将结果包含在本地脚本中。