Мне нужно проверить, находится ли файл на жестком диске в указанном месте ($ 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 Деннис.