指定した場所($ path。$ file_name)のHDDにファイルがあるかどうかを確認する必要があります。
is_file()
とfile_exists()
関数の違いはどれですか、どちらがPHPで使用するのに適していますか?
指定した場所($ path。$ file_name)のHDDにファイルがあるかどうかを確認する必要があります。
is_file()
とfile_exists()
関数の違いはどれですか、どちらがPHPで使用するのに適していますか?
回答:
is_file()
false
指定されたパスがディレクトリを指している場合に戻ります。指定されたパスが有効なファイルまたはディレクトリを指している場合file_exists()
に返されtrue
ます。したがって、それは完全にあなたのニーズに依存するでしょう。ファイルであるかどうかを具体的に知りたい場合は、を使用してください。それ以外の場合は、を使用します。is_file()
file_exists()
is_file()
が最速ですが、最近のベンチマークでは、それfile_exists()
がわずかに速いことを示しています。だからサーバーに依存すると思います。
私のテストベンチマーク:
benchmark('is_file');
benchmark('file_exists');
benchmark('is_readable');
function benchmark($funcName) {
$numCycles = 10000;
$time_start = microtime(true);
for ($i = 0; $i < $numCycles; $i++) {
clearstatcache();
$funcName('path/to/file.php'); // or 'path/to/file.php' instead of __FILE__
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "$funcName x $numCycles $time seconds <br>\n";
}
編集:@Tivieコメントをありがとう。サイクル数を1000から10kに変更しました。結果は次のとおりです。
ファイルが存在する場合:
is_file x 10000 1.5651218891144秒
file_exists x 10000 1.5016479492188秒
is_readable x 10000 3.7882499694824秒
ファイルが存在しない場合:
is_file x 10000 0.23920488357544秒
file_exists x 10000 0.22103786468506秒
is_readable x 10000 0.21929788589478秒
編集:clearstatcache();を移動 ループの内側。CJデニスに感謝します。
is_file()
もfile_exists()
。より速く見つけました。ファイル(ディレクトリではない)であることがわかっている場合は、代わりにそれを使用してください。
is_dir()
、file_exists()
(それはそうではありませんが)よりも20%速いことが判明した場合、とにかくdirsのみをチェックしている場合、それは重要な違いになる可能性があります...
私はこの投稿が古いことを知っていますが、この機能の違いはそれらの動作だけではありません。is_file()を使用して大きなファイルの存在を確認する場合、2 Go以上。あなたは驚きます。ファイルが存在しません。:(しかし、file_exists()でチェックすると、それは機能します。