當我使用它的完整URL(如include 'http://mysite.tld/mypage.php'
)包含頁面時,我不能使用中的$GLOBALS
,它返回Undefined index
錯誤。
但是,當我把它給使用它的相對路徑(如include 'mypage.php'
),那麼它的確定。
之所以我使用的URL,而不是相對路徑是,我想包括$_GET
參數mypage.php
是否有這種奇怪的行爲,任何合理的解釋?
請注意,這兩個文件位於同一個目錄中的同一臺服務器上。
當我使用它的完整URL(如include 'http://mysite.tld/mypage.php'
)包含頁面時,我不能使用中的$GLOBALS
,它返回Undefined index
錯誤。
但是,當我把它給使用它的相對路徑(如include 'mypage.php'
),那麼它的確定。
之所以我使用的URL,而不是相對路徑是,我想包括$_GET
參數mypage.php
是否有這種奇怪的行爲,任何合理的解釋?
包括與URL文件意味着代碼運行作爲一個單獨的過程,這意味着它以不同的可變範圍內運行。這與通過相對路徑包含文件相反,在這種情況下,它非常相當於將代碼剪切並粘貼到腳本中。
從本質上講,這意味着只能從您的出發腳本變量是那些你明確地傳遞(如你在這種情況下使用$_GET
變量)。這包括$_SESSION
變量,因爲調用者是您自己的服務器而不是客戶端。
此行爲在PHP手冊的include
頁指出:
如果目標服務器解釋的目標文件作爲PHP代碼, 可以使用URL請求字符串傳遞給所包含的文件所用 變量與HTTP GET。這不是嚴格意義上講同樣的事情 包括文件並繼承父文件的變量 範圍;該腳本實際上正在遠程服務器上運行,並且 結果將被包含到本地腳本中。
我假定你的意思'$ _GLOBALS',不'$ GLOBALS' ... – 2012-07-20 01:47:24
@JasonMcCreary號我的意思是[$ GLOBALS](http://php.net/manual/en/reserved.variables.globals。 PHP)。 '$ GLOBALS'是美元符號後並沒有強調只有[超全局(http://www.php.net/manual/en/language.variables.superglobals.php)變量。 – Pixel 2012-07-20 01:48:16
我站好了。顯示我是多麼使用它...從來沒有 - 不好的形式和或暗示的:) – 2012-07-20 01:51:58