2009-12-08 85 views
2

下面是確切的問題。我有一個自動加載功能,設置了一段代碼,看起來像這樣:爲什麼PHP在它明確存在時不包括我的文件?

if(file_exists($class_file)) 
{ 
    include($class_file); 
    return true; 
} 

然而,當$class_file設定爲一定值時,我得到一個包含錯誤:

Error String: include(includes/php/utilities/calendar_event_html.utility.php) 
[function.include]: failed to open stream: No such file or directory 

它的工作原理對其他文件很好,當我用調試器遍歷這段代碼時,很明顯PHP認爲文件存在,但似乎include沒有。有沒有人知道發生了什麼?

+3

也許PHP沒有權限訪問這個文件? – RaYell 2009-12-08 15:15:07

+0

@ ApoY2k好的,你可以在錯誤中看到,內容是'includes/php/utilities/calendar_event_html.utility.php',但它可以很好地處理'include/php/utilities/calendar_header_html.utility.php ' - 因爲我事先做了'file_exists',所以這兩者都必須存在。 – 2009-12-08 15:19:42

+0

上述代碼與您在應用程序中使用的代碼相同嗎?如果不是,包含是否發生在file_exists之外的其他文件中? – halfdan 2009-12-08 15:22:53

回答

9

從手冊:

Note: The check is done using the real UID/GID instead of the effective one. 

這意味着該文件可能存在,但它是可能的,它是不是由/ GID你的PHP實例與運行UID訪問。我建議你檢查該文件的權限。

最良好的祝願,
費邊

+0

我在Windows上,所以我不認爲權限會是一個問題(他們從未之前),但我使用Cygwin複製這個特定的文件 - 我不知道它是否改變了文件的權限,當我這樣做.. – 2009-12-08 15:32:52

+0

你可以在不同的機器上重現這種行爲嗎? – halfdan 2009-12-08 16:23:39

+0

我還沒有嘗試過,但是我使用Cygwin複製了一些JavaScript文件,但確實遇到過類似的問題。 – 2009-12-09 22:38:08

0

嘗試添加該位的調試代碼:

echo "<pre>"; 
echo get_include_path(); 
echo "</pre>"; 

function.get-include-path

這將返回你當前包括路徑,你可以用你的$進行比較class_file字符串。

相關問題