2010-07-04 55 views
1

上午有問題,PHP的require_once,要求,include_once,包括功能無法正確解析文件。我使用Apache 2.2.11在Windows Vista上運行PHP 5.3.1。require_once和include_once不解決文件正確

這是我收到的問題:

file_exists('C:/wamp/www/park_factor_network/system/application/shared/config/language.php') 

返回TRUE

is_readable('system/application/shared/config/language.php') 

返回TRUE

$fp = fopen('C:/wamp/www/park_factor_network/system/application/shared/config/language.php','r'); 
$contents = fread($fp, filesize('C:/wamp/www/park_factor_network/system/application/shared/config/language.php')); 

返回一個有效的文件資源,並將其存儲到$內容

然而:

require_once('system/application/shared/config/database.php') or die("Cannot Include Language Config"); 
require_once('C:/wamp/www/park_factor_network/system/application/shared/config/language.php') or die("Cannot Include Language Config"); 

返回:

Fatal error: require_once() [function.require]: Failed opening required '1' (include_path='.;C:\php5\pear') in C:\wamp\www\park_factor_network\system\application\shared\hooks\select_language.php on line 25 

C:\瓦帕\ WWW \ park_factor_network \ SYSTEM \應用\ news_site \鉤是一個目錄連接爲C:\瓦帕\ WWW \ park_factor_network \系統\程序\共享\鉤

的框架,從某個位置訪問該文件時,但是因爲這是直接包含或需要它不應該被認爲受到影響,只有PHP我只遇到此問題?如果我嘗試在我的設置中的其他任何地方包含文件,它會正常加載。

回答

7

require_once是一個語言結構。它不是一個函數,也沒有返回值。周圍的文件名參數

括號是可選的。這似乎意味着,在這一行:

require_once('system/application/shared/config/database.php') 
      or die("Cannot Include Language Config"); 

整個表達式

('system/application/shared/config/database.php') 
or die("Cannot Include Language Config"); 

評估(返回1),並作爲文件名參數。顯然,1不存在。

雖然你在做什麼並不重要,因爲include在加載文件失敗時不會返回false。無論如何,require_once()將終止腳本的執行。如果你照顧的錯誤報告的切換在生產環境中,你可以很容易地用PHP致命錯誤,告訴你該文件不存在(而不是您的自定義die())居住。對於一個偉大的地方,並詳細解釋

$file = 'system/application/shared/config/database.php'; 

if ((!is_file($file)) or(!is_readable($file))) 
    die("Cannot Include Language Config"); 

require_once('system/application/shared/config/database.php'); 
+0

+1:

如果需要正常退出腳本,我會前聲明做了file_exists調用,die()時失敗。 – 2010-07-04 15:39:26

+0

非常感謝您提供明確的答案。現在非常有意義的PHP我們幾個在怪胎IRC試圖讓我們的頭一輪的文件解析,這是沒有任何關係,在所有。 – 2010-07-04 15:50:10

+0

你應該更好地使用'is_file'和'is_readable',而不是'file_exists',因爲'file_exists'對於目錄也會返回true,並且(常規)文件也應該是可讀的。 – Gumbo 2010-07-04 15:52:30