2016-02-05 30 views
1

注意;這個問題不要求或包括(這是變量),同時要求或包括從以下網址 我面臨着一個奇怪的錯誤如下:從url請求時變量出錯

require_once "http://".$_SERVER['HTTP_HOST'].'/engine/header.php'; 

這導致錯誤與變量

未定義變量

這枚:

require_once '/engine/header.php'; 

不會造成任何問題!

對不起,如果拼寫錯誤或寫不可理解的話。

+0

爲什麼這不被幫助? –

+0

'require *()'函數只是內部路徑。 –

+0

嘗試打印或echo'ing $ _SERVER ['HTTP_HOST']以查看它是否解析爲您所期望的。 – BryanT

回答

0

你的答案位於here

如果「URL包括包裝」在PHP中被激活,您可以指定文件使用的URL包括(通過HTTP或者其它支持的封裝 - 見支持的協議和封裝器協議的列表),而不是本地路徑名。如果目標服務器將目標文件解釋爲PHP代碼,則可以使用與HTTP GET一起使用的URL請求字符串將變量傳遞到包含的文件。這與嚴格意義上講並不是一樣的,包括文件並讓它繼承父文件的變量作用域;該腳本實際上正在遠程服務器上運行,結果被包含在本地腳本中。

這意味着,如果您包含一個URL,它將是一個獨立的PHP執行超出您當前的範圍。您需要通過$_GET超全球通過變量。

如果include/require是絕對/相對文件路徑,您將能夠通過該範圍訪問變量。

+0

正是!我怎麼忘記了!謝謝,aziz。 –

1

如果URL包含包裝已啓用,則只能包含URL,因此請檢查allow_url_include在您的php配置中是否設置爲true。

+1

您可以傳遞遠程文件的URL,但有一些限制。 請參閱http://php.net/manual/en/function.include.php – BryanT

+0

其實,我沒有說問題是與包括或要求,拒絕答案。 –

+0

@AhmedAlaa你不拒絕在這個網站上的答案,你要麼投票或下來+接受和回答。學習如何使用stackoverflow @ http://stackoverflow.com/tour –

0

當您通過網絡服務器訪問.php文件時,網絡服務器執行該文件,並且發送給客戶端的響應是腳本的輸出,而不是腳本的源代碼。但require希望從文件中讀取PHP源代碼,以便它可以在當前腳本的上下文中執行它。

因此,除非header.php在遠程訪問時採取特殊措施輸出PHP源代碼,試圖使用URI請求它將無法正常工作。