php clearstatcache() объяснение производительности и параметров

я использую filemtime для снятия отпечатков пальцев внешних ресурсов в html, например:

<link rel="stylesheet" href="screen-<?=md5(filemtime('screen.css'));?>.css">

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

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

поэтому мне интересно, правильно ли я его использую.

кроме того, я обеспокоен производительностью полной очистки кэша при каждом вызове. Может ли кто-нибудь сказать мне, может ли это вызвать значительное замедление работы сервера?


clearstatcache также принимает два дополнительных параметра, но я не понимаю их смысла:

clear_realpath_cache очистить кэш realpath или не.

имя файла очистите realpath и кэш статистики для определенного имени файла только; используется только если clear_realpath_cache верно.

Я не понимаю, что означает" кэш realpath", и я не мог найти никакой информации об этом. Имеет ли смысл звонить clearstatcache таким образом:

clearstatcache(true,'/path/to/screen.css');

с намерением выяснить только информацию, связанную с этим конкретным файлом (и, следовательно, уменьшить "воздействие"clearstatcache)?

3 ответов


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

когда вы include('somefile'), somefile может быть в нескольких разных местах, как определено такими вещами, как ваш include_path, cwd, etc. Кэш realpath просто устраняет необходимость многократного поиска этих местоположений.

для вашего использования, ваш код кажется прекрасным.


$clear_realpath_cache относится к вызовам реального пути функция, результаты которой также кэшируются. Это не должно влиять на ваши вызовы filemtime.


Я не могу дать ответ сразу.

но я предлагаю вам использовать md5_file('screen.css') вместо md5(filemtime('screen.css')).