2014-04-25 43 views
31

我想包括在頁面中的PHP文件通過警告:require_once():HTTP://封裝在服務器配置由allow_url_include = 0禁止

require_once(http://localhost/web/a.php) 

我得到一個錯誤

Warning: require_once(): http:// wrapper is disabled in the server configuration by allow_url_include=0 

我在php.ini中更改了allow_url_include=1並且工作正常,但我不認爲每個人都會讓我更改他們的php.ini文件。

那麼,有沒有辦法做到這一點?

回答

44

該警告是由於您正在使用包含的文件的完整URL而生成的。這不是正確的方式,因爲這樣你將從Web服務器獲得一些HTML。用途:

require_once('../web/a.php'); 

使Web服務器可以執行該腳本並提供其輸出,而不是隻服務了源代碼(當前的情況下,這將導致該警告)。

6

你必須把路徑放到文件中。例如:

require_once('../web/a.php'); 

您無法從網絡(使用http協議)獲取該文件,因此它受到限制。這些文件必須位於同一臺服務器上。有可能看到對方(權利)

Dir-1 - 
     > Folder-1 -> a.php 
Dir-2 - 
     > Folder-2 -> b.php 

To include a.php inside b.php => require_once('../../Dir-1/Folder-1/a.php'); 
To include b.php inside a.php => require_once('../../Dir-2/Folder-2/b.php'); 
+0

我知道..但如果我想在兩個目錄..相同的文件,如文件是什麼'a.php'被放置在目錄1,現在我想包括它在DIR 3文件..和一個文件具有'a.php'從目錄3包含在目錄1文件之一...所以它給出錯誤'a.php'不存在 – Gags

+0

請讓我看看目錄結構。沒有它,我很難提供幫助。 – SoftGuide

+0

它是目錄1 - >文件夾1 - > a.php和目錄2 - >文件夾2 - > b.php [它有require_once('../../ a.php')] ..現在當我將b.php包含在目錄1中的一個文件中時,它會拋出一個錯誤。PHP不存在這是根據目錄結構是真的 – Gags

15

我在嘗試在我的Wordpress主題中包含PHP文件時出現了相同的錯誤。我可以通過使用dirname(__FILE__)來引用文件名來避開它。我無法使用相對路徑,因爲我的文件將被包含在整個主題的不同位置,所以像require_once '../path-to/my-file'這樣的東西將不起作用。

替換require_once get_template_directory_uri() . '/path-to/my-file'require_once dirname(__FILE__) . '/path-to/my-file'訣竅。

+0

這可能適用於以後可以評估require_once的情況,因爲它似乎不是在預編譯階段,而是在函數評估階段的後期。如果您需要在不需要使用dirname()調用(例如在父主題中)的情況下需要另一個文件之前需要該文件,則會阻止您首先評估文件的任何機會......至少這似乎是WordPress服務器的情況。 –

10

嘗試使用

<?php require_once($_SERVER['DOCUMENT_ROOT'].'/web/a.php'); ?> 
+0

謝謝。這個答案給了我一個類似問題所需要的東西。 –

0
require_once('../web/a.php'); 

如果沒有工作的人,以下是好主意,包括文件中的任何地方項目。

require_once dirname(__FILE__)."/../../includes/enter.php"; 

此代碼將從當前目錄以外的2個目錄中獲取文件。

0
require_once(APPPATH.'web/a.php'); 

在笨工作對我來說

檢查reference