ホームページ  >  記事  >  バックエンド開発  >  PHP の学習方法: PHP における is_file と file_exist の違い、およびディレクトリ is_dir を決定する方法

PHP の学習方法: PHP における is_file と file_exist の違い、およびディレクトリ is_dir を決定する方法

WBOY
WBOYオリジナル
2016-06-23 13:53:17963ブラウズ

PHP では、 is_file と file_isexist には小さな違いがあります
1) is_file:
$path ="/path/to/file/text.txt";
if(file_exists($path))
echo "ファイルが存在します " ;
else
echo "File not Exists"; たとえば、この例では、ファイルが存在する場合は true が返され、ファイルが存在しない場合は false が返されますが、
正しいパス ( file directory) が渡されると、 true も返されます:
$path ="/path/to/file";
2) file_isexist()
上記の場合、これは実際には起こりません。 1 つは渡されますが、

正しいパスも false を返します


PHP における file_exists、is_file、is_dir の違いについてのこの記事を読んだ後、PHP の file_exists = is_dir + is_file であることを基本的に理解しました。

検証するプログラムを作成します。

それぞれ 1000 回実行し、必要な時間を記録します。

ファイルが存在します (カレントディレクトリ)
is_file:0.4570ms
file_exists:2.0640ms

ファイルが存在します (絶対パスレベル 3/www/hx/a/)
is_file:0.4909ms
file_exists:3.3500ms

ファイルが存在します(絶対パス レベル 5/www/hx/a/b/c/)
is_file:0.4961ms
file_exists:4.2100ms

ファイルが存在しません (現在のディレクトリ)
is_file:2.0170ms
file_exists:1.9848ms

ファイルが存在しません (絶対パス レベル 5/www/hx/a/b/c/)
is_file:4.1909ms
file_exists:4.1502ms

ディレクトリが存在します
file_exists:2.9271ms
is_dir:0.4601ms
ディレクトリは存在します存在しません
file_exists:2.9719 ms
is_dir:2.9359ms

is_file($file)
file_exists($file)

$file がディレクトリの場合、is_file は false を返し、file_exists は true を返します
ファイルが存在する場合、is_file はfile_exists よりもはるかに高速です。
ファイルが検出されるディレクトリが深いほど、速度の差は大きくなりますが、少なくとも 4 倍高速です。

ファイルが存在しない場合、is_file は file_exists よりも少し遅くなりますが、無視しても問題ありません。

ディレクトリが存在する場合、is_dir は file_exists よりもはるかに高速です。


ディレクトリが存在しない場合、is_dir は file_exists よりも少し遅くなりますが、無視できます。
結論:

ファイルが存在するかどうかを判定したい場合は、関数 is_file() を使用します。
ディレクトリが存在するかどうかを判定したい場合は、関数 is_dir() を使用します。 場所がないようですfile_exists を使用するには、渡されるパラメータがファイルであるかディレクトリであるかがわかりません。


次のコードを使用してテストできます:

次のようにコードをコピーします:

$filename = 'test.txt';

if (is_file($filename)) {

echo " $filename が存在します!n";

} else {

echo "$filename が存在しません!n";

}

sleep(10);

if (is_file($filename)) {

echo " $ ファイル名が存在します!n";

} else {

echo "$ファイル名が存在しません!n";

}

?>

テスト コードを実行するときは、test.txt ファイルが存在することを確認します。 。上記のコードでは、is_file 関数を初めて使用してファイルが存在するかどうかを確認し、次に sleep 関数を呼び出して 10 秒間スリープします。この 10 秒以内に、test.txt ファイルを削除する必要があります。最後に、is_file 関数を 2 回目に呼び出した結果を確認します。出力結果は次のとおりです。

test.txt が存在します!

test.txt が存在します!

なるほど、「test.txt が存在します!」が 2 回出力されたのはなぜでしょうか。理由は、is_file にキャッシュがあるためです。 is_file 関数が初めて呼び出されたとき、PHP はファイル属性 (file stat) を保存します。is_file が再度呼び出されたとき、ファイル名が最初と同じであれば、そのファイルは直接キャッシュに返されます。

それでは、is_file を file_exists に変更するとどうなるでしょうか?上記のコードの is_file 関数を file_exists 関数に変更し、上記のテスト メソッドを再度使用してテストできます。結果は以下の通りです:

test.txt は存在​​します!

test.txt は存在​​しません!

2 回目に file_exists を呼び出すと、ファイルが存在しないことが返されます。これは、file_exists 関数が存在しないためです。ファイルが存在するかどうかに関係なく、file_exists が呼び出されるたびにディスク検索が実行されるため、2 回目には false が返されます。

ここまで言ってきましたが、is_file の方がパフォーマンスが良いと主張するのであれば、それは仕方ありません


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。