2011-12-11 24 views
3

我遇到了file_exists返回false並且is_file返回true的問題。PHP:is_file()和file_exists()在同一個文件上返回不同的結果

echo(getmygid()." = gid\n"); //501 
echo(getmyuid()." = uid\n"); //501 
echo(posix_getgid()." = pgid\n"); //501 
echo(posix_getuid()." = puid\n"); //501 
var_dump(file_exists("/home/www/public_html/")); //bool(true) 
var_dump(file_exists("/home/www/public_html/index.html")); //bool(false) 
var_dump(is_file("/home/www/public_html/index.html")); //bool(true) 

var_dump(stat("/home/www/public_html/index.php")); 

輸出是:

501 = gid 
501 = uid 
501 = pgid 
501 = puid 
bool(true) 
bool(false) 
bool(true) 
array(26) { 
    [0]=> 
    int(51712) 
    [1]=> 
    int(58055) 
    [2]=> 
    int(33197) 
    [3]=> 
    int(1) 
    [4]=> 
    int(501) 
    [5]=> 
    int(501) 
    [6]=> 
    int(0) 
    [7]=> 
    int(473) 
    [8]=> 
    int(1323573973) 
    [9]=> 
    int(1323573973) 
    [10]=> 
    int(1323574039) 
    [11]=> 
    int(4096) 
    [12]=> 
    int(8) 
    ["dev"]=> 
    int(51712) 
    ["ino"]=> 
    int(58055) 
    ["mode"]=> 
    int(33197) 
    ["nlink"]=> 
    int(1) 
    ["uid"]=> 
    int(501) 
    ["gid"]=> 
    int(501) 
    ["rdev"]=> 
    int(0) 
    ["size"]=> 
    int(473) 
    ["atime"]=> 
    int(1323573973) 
    ["mtime"]=> 
    int(1323573973) 
    ["ctime"]=> 
    int(1323574039) 
    ["blksize"]=> 
    int(4096) 
    ["blocks"]=> 
    int(8) 
} 

我想我已經做錯了什麼配置,但還沒有完全想通了它是什麼。

更令人興奮的是,儘管file_exists不起作用fread(fopen('/home/www/public_html/index.html','r'), filesize('/home/www/public_html/index.html'))的確會返回文件的內容。

+2

進一步解釋你已經發布了錯誤的文件的統計資料,你能改正這一點? – ajreal

+0

所有這些目錄(home,www,public_html)都爲此腳本啓用了讀取權限?他們都是目錄,而不是符號鏈接? –

+0

是的。我的錯。只是修正了那個。這是空的。和一個655模式。 – teotwawki

回答

2

奇怪,這裏有幾個選項手動檢查:

Note: The results of this function are cached. See clearstatcache() for more details. 

或者這也許:

Warning 

該函數返回FALSE的文件無法訪問因安全模式限制。但是,如果這些文件位於safe_mode_include_dir中,它們仍然可以包含在內。

這些是我能想到的唯一可能影響它的事情。不知道你是否嘗試過,但值得一試。

UPDATE

如何對文件的標誌嗎?從shell(如果有shell訪問權限),你可以做一個ls -alh /home/www/public_html | grep index.html並確保一個標誌沒有被設置爲奇怪嗎?

更新2

的問題是,目錄的權限分別使業主無法查看目錄的內容。這是在意見

+0

根據phpinfo() safe_mode \t off \t off clearstatcache()沒有改變結果。 – teotwawki

+0

只是驗證,它也不是一個符號鏈接,對嗎? –

+0

正確,它不是符號鏈接。 – teotwawki

2

參見file_exists()警告:對於無法訪問的文件

該函數返回FALSE由於安全模式的限制。但是,如果這些文件位於safe_mode_include_dir中,則仍然可以包含這些文件。

is_file()函數似乎沒有這個限制。

相關問題