2016-04-30 2 views
2
похож

согласно PHP документации для file_exists()PHP для file_exists() или функции

Результаты этой функции кэшируются. Подробнее см. Clearstatcache() для .

Но он не предоставляет информацию о том, как долго php будет хранить эту информацию в кеше. Я проверил документацию для clearstatcache() , но такой информации нет. Googling также не помог это время.

Я создаю приложение, в котором вызывается файл_exists для генерации некоторого вывода, и поскольку проверяемый файл может быть удален любым пользователем любым пользователем, я должен быть уверен, действительно ли он существует до генерации вывода.

Вызов clearcache() до того, как файл_exists() решит цель, но только для любопытства. Я хотел бы знать, как долго PHP будет кэшировать информацию о файлах (время по умолчанию) и по какой переменной я могу это время истечения срока действия кеша ?

EDIT 1: В реале повторная проверка файла file_exists() после удаления файла возвращает false, но если это так, каково значение кеша, как написано в документации?

EDIT 2:

<? 
var_dump(file_exists('/home/user/filecheck.php')); 
sleep(20); 
// after running script, sleep for 20 seconds just to quickly delete this file manually before file_exists is called again. 
// unlink is not used since as per documentation it'll clear php cache. 
var_dump(file_exists('/home/user/filecheck.php')); 
?> 

и ответ сценария

boolean true 

boolean false 

Это означает, что PHP не кэширует file_exists информации, если файл существует даже для такого же исполнения, то почему написано в документации, что «результаты этой функции кэшированы»?

+3

PHP кэширует эту информацию на время запроса –

+0

длительность запроса ??? – agaggi

+0

PHP выполняет индивидуальные запросы на веб-сервер, каждый в своем потоке; и когда ответ возвращается веб-браузеру, запрос заканчивается –

ответ

0

Вам не нужно, потому что в clearstatcache()manual говорит:

Также следует отметить, что PHP не кэширует информацию о несуществующих файлов. Итак, если вы вызываете file_exists() в файл, который не существует, он вернет FALSE, пока вы не создадите файл. Если вы создадите файл , он вернет TRUE, даже если вы удалите файл. Однако unlink() автоматически очищает кеш.

также избежать некоторых ошибок, то лучше использовать is_file(), если Вы хотите, чтобы проверить наличие файла и is_dir() для каталога, потому что file_exists() возвращает истину, если путь, который существует как это файл или каталог.

p.s. чтобы доказать, что если файл удален это не кэшируются: http://joxi.ru/eAO55BF4ojZjmo

о значении кэша: снова прочитайте это руководство: http://php.net/manual/en/function.clearstatcache.php

При использовании стат(), lstat(), или любой из других функций, перечисленных в список затронутых функций (ниже), PHP кэширует информацию, которую возвращают функции , чтобы обеспечить более высокую производительность.

это означает, что кэш для статистики файлов, чтобы не перечитывать его каждый раз, clearstatcache() удаляет кэш стат для этого файла и силы перечитать их.

P.S. на самом деле это глупо для статистики кеша без явного включения его пользователем с чем-то вроде: ini_set('cache_file_stats', true) было бы лучше дать ему контроль над ним.

+1

, но если ранее был файл и были вызваны файлы_файлы, php будет кэшировать информацию о файлах, а затем, если файл будет удален, file_exists снова вернутся. – agaggi

+0

have You проверено в реальной жизни? – num8er

+0

только что проверено: http://joxi.ru/eAO55BF4ojZjmo – num8er

0

Как долго кеш стата кэширует информацию, можно настроить в файле php.ini с помощью переменной realpath_cache_ttl. Значение по умолчанию составляет 120 секунд.

Смежные вопросы