2010-11-05 71 views
2

爲什麼這項工作:PHP包括幫助

<?php include "includes/top_nav.php"; ?> 

?爲什麼這不是爲我工作嗎?作爲所述in the documentation該服務器

http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

+0

您忘記了添加代碼。 – zzzzBov 2010-11-05 16:27:43

+0

你忘了添加錯誤信息。 – 2010-11-05 16:28:18

+0

沒有錯誤消息,第一個示例包含我期望它包含的html,第二個示例不包含我期望它包含的html。 – oshirowanen 2010-11-05 16:29:12

回答

2

我看到兩個可能的原因。

首先,您的服務器可能未配置爲允許URL文件訪問。在這種情況下,錯誤將顯示爲「在服務器配置中禁用URL文件訪問」

如果包含實際工作,但不包括您的期望,但這是一個完整的其他故事。在這種情況下,理解的關鍵是如何處理這樣的請求。在執行你共享的腳本時,你的服務器會執行一個HTTP請求(對它自己)並要求輸出top_nav.php。這是對服務器的一個全新的請求,所以關於請求的原始請求的細節不再起作用。

該請求將來自不同的IP地址(即您的服務器的地址,而不是原始客戶端)的不同用戶(即Apache),不同的Cookie,不同的$_GET數據和不包含$_POST數據。

因此,如果top_nav.php在渲染時以任何方式檢查服務器變量,環境變量,PHP變量或任何其他運行時狀態,則將失敗。

+0

你說得對,allow_url_include被設置爲Off。 – oshirowanen 2010-11-05 16:36:56

+0

@oshirowanen你最好保持關閉,愚蠢 – 2010-11-05 18:59:00

+0

爲什麼要保持關閉? – oshirowanen 2010-11-11 20:21:44

5

URL fopen封裝可能是無效的,即使它的啓用,它不與Windows上工作。

1

您需要啓用URL fopen wrappers

<?php include "http://localhost/includes/top_nav.php"; ?> 
0

From PHP docs

如果「URL fopen封裝」在 PHP(他們是在默認 配置)啓用後,您可以指定 文件使用URL包括(通過 HTTP或其他支持的包裝 - 請參閱 支持的協議/包裝列表 獲取協議列表)而不是 本地路徑名。

你的服務器上的URL fopen包裝的價值是什麼?