指定した場所 ($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 x1000001.5651218891144秒
file_exists x100001.5016479492188秒
is_読み取り可能x100003.7882499694824秒
ファイルが存在しない場合:
is_file x100000.23920488357544秒
file_exists x100000.22103786468506秒
is_読み取り可能x100000.2192988858478秒
編集:clearstatcache();を移動しました ループ内。CJデニスに感謝します。