Мне нужно проверить, находится ли файл на жестком диске в указанном месте ($ path. $ File_name).is_file или file_exists в PHP
В чем разница между функциями is_file()
и file_exists()
и которые лучше/быстрее использовать в PHP?
Мне нужно проверить, находится ли файл на жестком диске в указанном месте ($ path. $ File_name).is_file или file_exists в PHP
В чем разница между функциями 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";
}
Edit: @Tivie спасибо за комментарий. Изменено количество циклов от 1000 до 10k. Результат:
когда файл существует:
is_file х 10000 +1,5651218891144 секунд
file_exists х 10000 +1,5016479492188 секунд
is_readable х 10000 +3,7882499694824 секунд
когда файл не существует:
is_file х 10000 +0,23920488357544 секунды
file_exists х 10000 +0,22103786468506 секунды
is_readable х 10000 +0,21929788589478 секунды
Редактировать: clearstatcache перемещена(); внутри цикла. Спасибо CJ Деннис.
, чтобы этот тест работал, вы должны добавить clearstatcache(); поскольку результаты для is_file и file_exists кэшируются по всему сценарию. Anyways file_exists() немного медленнее, но не должен иметь никакого значения, если вы не выполняете проверки файлов 100K. http://www.php.net/manual/en/function.clearstatcache.php – Tivie
Я тоже нашел 'is_file()' быстрее, чем 'file_exists()'. Если вы знаете, что это файл (а не каталог), определенно используйте его. – Jonathan
Нечетный, теперь кажется, что «file_exists» быстрее, чем «is_file». – weynhamz
Насколько я знаю, if_file также не работает для символических ссылок, а не только для каталогов. – stefs
Просто прошел быстрый тест, и он действительно разрешает символическую ссылку. – hbw