Я сделал несколько тестов для сравнения и измерения скорости обеих функций. is_file, кажется, в несколько раз быстрее (я использовал 10000 итераций для обоих), чем file_exists . Интересно, использует ли PHP или ОС какой-то кеш для этих функций или всегда имеет доступ к жесткому диску? Я думаю, нет, но мне интересно …
Я использовал этот код:
<?php $time = microtime(); $time = explode(' ', $time); $begintime = $time[1] + $time[0]; for($i=0;$i<10000;$i++) file_exists('/Applications/MAMP/htdocs/index.php'); $time = microtime(); $time = explode(" ", $time); $endtime = $time[1] + $time[0]; $totaltime = ($endtime - $begintime); echo 'PHP parsed this in ' .$totaltime. ' seconds.</br>'; $time = microtime(); $time = explode(" ", $time); $begintime = $time[1] + $time[0]; for($i=0;$i<10000;$i++) is_file('/Applications/MAMP/htdocs/index.php'); $time = microtime(); $time = explode(" ", $time); $endtime = $time[1] + $time[0]; $totaltime = ($endtime - $begintime); echo 'PHP parsed this in ' .$totaltime. ' seconds.</br>'; ?>
Когда вы используете stat (), lstat () или любую из других функций, перечисленных в списке затронутых функций (ниже), PHP кэширует информацию, возвращаемую этими функциями, чтобы обеспечить более высокую производительность. Однако в некоторых случаях вам может понадобиться очистить кешированную информацию. Например, если один и тот же файл проверяется несколько раз в рамках одного сценария, и этот файл может быть удален или изменен во время операции этого сценария, вы можете выбрать очистить кеш статуса. В этих случаях вы можете использовать функцию clearstatcache (), чтобы очистить информацию о том, что PHP кэширует файл.
Затронутые функции включают stat (), lstat (), file_exists (), is_writable (), is_readable (), is_executable (), is_file (), is_dir (), is_link (), filectime (), fileatime (), filemtime () , fileinode (), filegroup (), fileowner (), filesize (), filetype () и fileperms ().
PHP кэширует как is_file()
и file_exists()
в кеше stat. Вызовите clearstatcache()
чтобы очистить его.
Редактировать:
Во всяком случае, эти два должны занимать одинаковое количество времени, потому что оба они называют функцией stat()
ОС, но результаты одного могут быть кэшированы для другого с помощью PHP (если вы не clearstatcache()
) или операционной системой, поскольку Yuliy упоминает ниже ,
is_file
и file_exists
– две разные функции, которые выполняют две разные вещи; file_exists
проверяют только, существует ли файл, is_file
сообщает, является ли целевой файл действительным, и (например) не каталогом.
Они не должны использоваться для одной и той же цели, поэтому сравнение производительности невозможно (imho)