Реализация кэширования на PHP. Clearstatcache - Очищает кэш состояния файлов

  • 03.11.2019

(PHP 4, PHP 5, PHP 7)

clearstatcache — Очищает кэш состояния файлов

Описание

void clearstatcache ([ bool $clear_realpath_cache = false [, string $filename ]])

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

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

Замечание :

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

Список функций, результаты выполнения которых кешируются: 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() .

Список параметров

clear_realpath_cache

Очищать кэш realpath или нет.

Filename

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

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Список изменений

Примеры

Пример #1 Пример использования clearstatcache()

$file = "output_log.txt" ;

function get_owner ($file )
{
$stat = stat ($file );
$user = posix_getpwuid ($stat [ "uid" ]);
return $user [ "name" ];
}

$format = "UID @ %s: %s\n" ;

Chown ($file , "ross" );
printf ($format , date ("r" ), get_owner ($file ));

Clearstatcache ();
printf ($format , date ("r" ), get_owner ($file ));
?>

Когда Вы делаете проект, который обладает достаточно проблемными страницами в плане скорости их загрузки, то надо проводить рефакторинг. Но бывают случаи, когда Вы всё написали идеально, однако, скорость оставляет желать лучшего. В таких случаях поможет кэширование страниц . Поэтому я решил написать статью о реализации кэширования на PHP .

Прежде чем показывать код, Вы должны заранее осознать алгоритм. Кэширование - это просто сохранение сгенерированной страницы в отдельный файл . То есть получили HTML-код страницы и сохранили его в отдельный файл. Затем при следующем обращении к скрипту заново страница не генерируется, а берётся HTML-код из этого файла. Разумеется, если при генерации речь может идти даже о десятках секунд (бывает и такое), то здесь речь идёт о сотых долях секунды. Разница очевидна.

Теперь сам код. Вам нужно создать 2 специальных файла. Первый файл будет заниматься выводом кэша, а второй - созданием кэша.

Начнём с первого файла, который назовём read_cache.php :

$cache_time = 300; // Время жизни кэша в секундах
$file = strrchr($_SERVER["SCRIPT_NAME"], "/");// Получаем название файла
$file = substr($file, 1); // Удаляем слеш
$cache_file = "/cache/$file.html"; // Файл будет находиться, например, в /cache/a.php.html
if (file_exists($cache_file)) {
// Если файл с кэшем существует
if ((time() - $cache_time) < filemtime($cache_file)) {
// Если его время жизни ещё не прошло
echo file_get_contents($cache_file); // Выводим содержимое файла
exit; // Завершаем скрипт, чтобы сэкономить время на дальнейшей обработке
}
}
ob_start(); // Открываем буфер для вывода, если кэша нет, или он устарел
?>

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

Теперь создадим файл write_cache.php , который будет заниматься записью в файл того, что у нас накопилось в буфере:

$handle = fopen($cache_file, "w"); // Открываем файл для записи и стираем его содержимое
fwrite($handle, ob_get_contents()); // Сохраняем всё содержимое буфера в файл
fclose($handle); // Закрываем файл
ob_end_flush(); // Выводим страницу в браузере
?>

И теперь в любом PHP-файле на сайте, отвечающем за вывод страницы, можно включить кэширование следующим образом:

require_once "read_cache.php"; // Пытаемся вывести содержимое кэша
// Здесь идёт обычная генерация страницы
require_once "write_cache.php"; // Здесь идёт сохранение сгенерированной страницы в кэш
?>

Таким образом, теперь Вы можете все свои проблемные страницы начать кэшировать. Но не забывайте, что пока кэш живёт, любые обновления пользователь видеть не будет . Поэтому делайте кэширование на PHP только для тех страниц, которые редко обновляются.

Часто в процессе работы заказчики хотят видеть, как продвигаются работы над тем или иным сайтом. Но они сталкиваются со следующей проблемой — сайт выглядит по-старому или с какими-то косяками. Почти в 100% случаев виноват... браузер, а точнее, его функция «кэширование страниц». Это делается для того, чтобы уменьшить время загрузки сайта.

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

Очистка кэша в FireFox

Вызываем диалоговое окно, нажимая одновременно три клавишы CTRL + SHIFT + DEL. В открывшемся окне нажимаем «Очистить » и выбираем «Всё ». Далее убираем все галочки, оставляем только одну возле «Кэш » и нажимаем «Очистить ».

Очистка кэша в Internet Explorer

Нажимаем справа в углу значок «Сервис » или нажимаем кнопки ALT + X. Далее выбираем «Свойства обозревателя »:

В новом окне нажимаем кнопку «Удалить ».

Оставляем только две галочки, подчеркнутые красным. Нажимаем «Удалить ».

Очистка кэша в Opera

Нажимаем на логотип «Opera » слева вверху. Далее нажимаем на «Настройка » и потом на «Удалить личные данные ».

В диалоговом окне нажимаем на «Детальная настройка » и оставляем только одну галку «Очистить кэш ». Нажимаем «Удалить ».

Очистка кэша в Google Crome и Яндекс.Браузер

Нажимаем клавиши CTRL + H. В открывшемся окне кликаем на «Очистить историю... »

В новом окне нажимаем на «за прошедший час » и выбираем «за все время ». Оставляем только одну галку возле «Очистить кэш » и нажимаем на «Очистить историю »

(PHP 4, PHP 5, PHP 7)

clearstatcache — Очищает кеш состояния файлов

Описание

void clearstatcache ([ bool $clear_realpath_cache = FALSE [, string $filename ]])

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

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

Замечание :

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

Список функций, результаты выполнения которых кешируются: 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() .

Список параметров

clear_realpath_cache

Очищать кеш realpath или нет.

Filename

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

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Список изменений

Примеры

Пример #1 Пример использования clearstatcache()

$file = "output_log.txt" ;

function get_owner ($file )
{
$stat = stat ($file );
$user = posix_getpwuid ($stat [ "uid" ]);
return $user [ "name" ];
}

$format = "UID @ %s: %s\n" ;

Chown ($file , "ross" );
printf ($format , date ("r" ), get_owner ($file ));

Clearstatcache ();
printf ($format , date ("r" ), get_owner ($file ));
?>

В сегодняшней статье рассмотрен вопрос как очистить кэш Drupal.

В большинстве случаев, очистка кэша требуется при перемещении сайта с одного хостинга на другой. Также очистка нужна при установке новых модулей, или с целью устранения неполадок. Часто бывает так, что при настройке меню и сохранении, не видно никаких изменений. В данном случае тоже помогает очистка кэша. Сама очистка кэша для сайта безвредна - все что вы можете заметить, это кратковременное незначительное замедление отдачи контента сайтом. Скорость сайта восстановится, после того, как кэш снова будет наполнен.

Кнопка для очистки кэша Drupal

Откройте меню Конфигурация (Site configuration) > Секция Разработка (Development) > Производительность (Performance) . Вверху страницы вы увидите кнопку Очистка кэша.

После нажатия вы увидите системное сообщение: Кэш очищен .

Выполнение update.php также очистит кэш

Запуск скрипта /update.php - это второй простой способ очистить кэш. Если вы не можете войти в систему, или не имеете прав пользователя администратор (ИД пользователя администратор - 1), следует установить переменную $update_free_access = TRUE; в файле /sites/default/settings.php , после чего снова запустить /update.php. После очитки кэша не забудьте вернуть переменную $update_free_access в значение FALSE.

php код для очистки кэша

Также PHP код может удалить не только кэш, а и важные данные данные, поэтому внимательно выполняйте SQL комманды вида DELETE FROM . Следующий маленький скрипт очистит кэш.

Также можно выполнить следующую команду:

Создайте файл называющийся, например cc.php, расположенный внутри дерева сайта, можно и в корне - главное, чтоб никто посторонний не узнал про его существование. Содержимое файла должно быть следующее:

Drupal 6

Drupal 7