Мне нужно проверить, находится ли файл на жестком диске в указанном месте ($ path. $file_name).
В чем разница между is_file()
и file_exists()
и что лучше/быстрее использовать в PHP?
Мне нужно проверить, находится ли файл на жестком диске в указанном месте ($ path. $file_name).
В чем разница между 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 Dennis.