1

当我使用它的完整 URL(如include 'http://mysite.tld/mypage.php')包含一个页面时,我不能使用$GLOBALSin mypage.php,它会返回Undefined index错误。

但是当我使用它的相对路径(如include 'mypage.php')包含它时,就可以了。

我使用 URL 而不是相对路径的原因是我想包含$_GET参数mypage.php

这种奇怪的行为有什么合乎逻辑的解释吗?


请注意,这两个文件位于同一台服务器上的同一目录中。

4

1 回答 1

1

包含带有 URL 的文件意味着代码作为单独的进程运行,这意味着它在不同的变量范围下运行。这与通过相对路径包含文件相反,在这种情况下,它几乎等同于将代码剪切并粘贴到脚本中。

从本质上讲,这意味着您的起始脚本中唯一可用的变量是您明确传递的变量(就像您在本例中使用$_GET变量一样)。这包括$_SESSION变量,因为调用者是您自己的服务器而不是客户端。

这种行为在 PHP 手册的include页面中有说明:

如果目标服务器将目标文件解释为 PHP 代码,则可以使用与 HTTP GET 一起使用的 URL 请求字符串将变量传递给包含的文件。严格来说,这与包含文件并使其继承父文件的变量范围不同。该脚本实际上正在远程服务器上运行,然后将结果包含到本地脚本中。

于 2012-07-20T04:50:55.113 回答