ファイルが指定された場所($ path。$ file_name)のHDDにあるかどうかを確認する必要があります。PHPのis_fileまたはfile_exists
is_file()
とfile_exists()
の機能の違いはどれですか?また、PHPでの使用が優れていますか?
ファイルが指定された場所($ path。$ file_name)のHDDにあるかどうかを確認する必要があります。PHPのis_fileまたはfile_exists
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デニス。
このベンチマークが機能するには、clearstatcache()を追加する必要があります。 is_fileとfile_existsの結果はスクリプト全体でキャッシュされるためです。とにかくfile_exists()は少し遅くなりますが、約100Kのファイルチェックを実行しない限り、違いはありません。 http://www.php.net/manual/en/function.clearstatcache.php – Tivie
私は 'file_exists()'よりも 'is_file()'を早く見つけました。それがディレクトリではなくファイルであることがわかっている場合は、間違いなく代わりに使用してください。 – Jonathan
奇妙なことに、今は 'file_exists'が 'is_file'より高速です。 – weynhamz
私が知る限り、if_fileはディレクトリだけでなくシンボリックリンクにも失敗します。 – stefs
クイックテストを実行しましたが、実際にはシンボリックリンクを解決します。 – hbw