SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
てるてる動画

【php】ファイルの存在確認の速度比較

問題

phpでファイルの有無を確認する関数がいくつかありますが、どれが速いですか。

答え

それぞれ何度か実行して時間を計測する。

あるディレクトリに1~10000のファイル名のファイルを作成。

$ cd xxx
$ touch {1..10000}

1~20000のファイル名でランダムに10万回ファイルの有無を確認する。あったりなかったりする状況を作る。

<?php
$t = microtime(true);
for ($i = 0; $i < 100000; ++$i) {
    is_readable('x/' . rand(1, 20000));
}
echo microtime(true) - $t;
echo "\n";
<?php
$t = microtime(true);
for ($i = 0; $i < 100000; ++$i) {
    file_exists('x/' . rand(1, 20000));
}
echo microtime(true) - $t;
echo "\n";
<?php
$t = microtime(true);
for ($i = 0; $i < 100000; ++$i) {
    is_file('x/' . rand(1, 20000));
}
echo microtime(true) - $t;
echo "\n";

php7.4でそれぞれを10回実行して平均をとると以下の結果だった。

is_readable -> 0.534218
file_exists -> 0.47686
is_file -> 0.523497

差はわずかだが file_exists が高速だった。

10万回でこの差なので実用上ほぼ速度差が問題になることはないでしょう。

あとは用途の問題で、ディレクトリでもtrueが返ってよいか、有無が問題か、権限的に読めるかどうかまで確認するかなど考えて使うこと。

関連するメモ

コメント