Intereting Posts
Использование php для экспорта запроса mysql в загружаемый CSV-файл Предупреждение: file_get_contents не удалось открыть поток: время ожидания подключения включает / simple_html_dom.php в строке 75 Следует ли использовать htmlspecialchars () для информации о вводе или непосредственно перед выходом? PHP strtotime проблемы с минутами Как отсортировать многомерный XML-файл? Как вы используете эту библиотеку PHP? $ me = $ facebook-> api ('/ me'); возвращает пустую строку Ошибка PHP intl.so Получите ВСЕ возможные результаты из смесительного массива Regexp для извлечения всех ссылок и якорных текстов из HTML Публикация активов из модулей в Zend Framework 2 Как получить адрес электронной почты из длинной строки Важно ли проверять, является ли загруженный файл фактическим файлом изображения? Как проверить частичное сходство двух строк в PHP Как я могу реализовать список контроля доступа в своем приложении Web MVC?

Производительность и кеш is_file / file_exists

Я сделал несколько тестов для сравнения и измерения скорости обеих функций. 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>'; ?> 

Solutions Collecting From Web of "Производительность и кеш is_file / file_exists"

Когда вы используете 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)