2010-07-30 74 views
0

這似乎是世界上最基本的東西,但我不知道PHP。通過變量包含文件

我想在我的頁面上包含一個文件,並且該文件的目錄是在變量內指定的。

<?php 
    $pageGroup = 'news'; 
    $directory = 'http://localhost:8888/includes/'.$pageGroup.'/rightCol.html'; 
    include($directory); 
?> 

當我echo$directory的結果,我得到 「http://localhost:8888/includes/news/rightCol.html」,這是完全正確的。然而,當我嘗試在該目錄中包含文件時,什麼也沒有發生。我認爲這與include語法有關。

任何建議表示讚賞。

+0

1.你想不包括文件,但URL 2 。轉動錯誤顯示/報告看看會發生什麼 – 2010-07-30 13:27:13

回答

0

確保您已從php.ini打開allow_url_fopen設置。

話雖如此,有連接到安全風險,請參閱:

建議:

包含文件,不要使用完整的URL路徑,只使用文件/文件夾路徑。

例子:

include "/includes/news/rightCol.html"; // get from specified dir 
include "../rightCol.html"; // get from parent dir 
include "../../rightCol.html"; // get from parent parent dir 

要包含來自根目錄的文件,你可能要使用前綴您的路徑:

$_SERVER['DOCUMENT_ROOT']; 
+0

這段代碼將會出現在幾個不同的目錄和子目錄中的不同頁面上......'/ includes/news/rightCol.html'總是會導航到PHP中的相同位置? – Squirkle 2010-07-30 13:31:31

+0

allow_url_include也必須打開。但它肯定是一個安全風險。並且包含具有變量名稱的本地文件也可能是危險的。 – Krab 2010-07-30 13:32:17

+0

@Squirkle:它取決於你當前腳本的路徑。您可以使用'../'指定最高級目錄或使用絕對路徑'$ _SERVER ['DOCUMENT_ROOT']。 /includes/news/rightCol.html;'。 – Sarfraz 2010-07-30 13:35:56

0

由於安全考慮,您不想包含http://資源。而不是你需要通過file_get_contents得到它的內容,但如果這是一個簡單的頁面元素,你可以使用包含沒有完整的網址。

+0

如果我所在的頁面是'http:// localhost:8888/news /'如何遍歷'/ includes'?我明白,PHP不承認'/'回到網站根與HTML一樣...... – Squirkle 2010-07-30 13:30:04

+0

fabrik:是的,你可以。見http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-include – Krab 2010-07-30 13:30:07

+0

這是一個驚人的安全漏洞,正確:) – fabrik 2010-07-30 13:38:31