2011-12-11 32 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

あなたは間違ったファイルにstatを投稿しましたが、修正できますか? – ajreal

+0

これらのディレクトリ(home、www、public_html)には、このスクリプトに対して読み取り権限が有効になっていますか?そして、それらはすべてシンボリックリンクではなく、ディレクトリですか? –

+0

ええ。私の悪い。ちょうどそれを修正した。これは空です。 655モードがあります。 – teotwawki

答えて

2

奇妙が、ここでマニュアルから確認するためのいくつかのオプションがあり

Warning 

この関数は、のためにアクセスできないファイルについてfalseを返しますセーフモード制限。ただし、これらのファイルがsafe_mode_include_dirにある場合は、これらのファイルを含めることができます。

これは、それが影響していると思う唯一のものです。もしあなたがそれを試したのかどうかは分かりませんが、一発の価値があります。ファイルフラグについて

UPDATE

どのように?シェルから(シェルアクセスがある場合)ls -alh /home/www/public_html | grep index.htmlを実行して、フラグが奇妙に設定されていないことを確認できますか?

UPDATE 2

問題は、所有者は、ディレクトリの内容を表示することができませんでしたので、ディレクトリのアクセス権が設定されたことです。コメント内でさらに説明されています

+0

phpinfo()による safe_mode \tオフ\tオフ clearstatcache()は結果を変更しませんでした。 – teotwawki

+0

ちょうど、それもシンボリックリンクではないことを確認して、正しいですか? –

+0

正しいですが、シンボリックリンクではありません。 – teotwawki

2

file_exists()上の警告を参照してください。

この機能が原因セーフモードの制限にアクセスできないファイルのためのFALSEを返します。ただし、これらのファイルが含まれている場合は、safe_mode_include_dirに含めることができます。

is_file()の機能にはこの制限はありません。多分

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

またはこの:

関連する問題