Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2016-02-18 15:27:54

noobie
Новичок
Зарегистрирован: 2016-02-18
Сообщений: 1

Вопрос по коду FluxBB 1.5.9.

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

На этапе работы common.php подключается скрипт cash.php, в котором объявляются функции для работы с кэшем, после чего вызывается функция генерации generate_config_cache();

С функцией generate_config_cache() всё ясно — извлекаем из БД настройки, формируем массив с настройками и генерируем данные для последующей записи в файл. Далее для записи в файл вызывается функция fluxbb_write_cache_file('cache_config.php', $content).

function fluxbb_write_cache_file($file, $content)
{
	$fh = @fopen(FORUM_CACHE_DIR.$file, 'wb');
	if (!$fh)
		error('Unable to write cache file '.pun_htmlspecialchars($file).' to cache directory. Please make sure PHP has write access to the directory \''.pun_htmlspecialchars(FORUM_CACHE_DIR).'\'', __FILE__, __LINE__);

	flock($fh, LOCK_EX);
	ftruncate($fh, 0);

	fwrite($fh, $content);

	flock($fh, LOCK_UN);
	fclose($fh);

	fluxbb_invalidate_cached_file(FORUM_CACHE_DIR.$file);
}

Работа которой тоже ясна, но не пойму, зачем в конце функции вызывается функция удаления файла $file? Это же файл cache_config.php, в который функция записывала данные $content.

function fluxbb_invalidate_cached_file($file)
{
	if (function_exists('opcache_invalidate'))
		opcache_invalidate($file, true);
	elseif (function_exists('apc_delete_file'))
		@apc_delete_file($file);
}

Offline

#2 2016-02-18 15:49:00

Visman
Administrator
Из Сибирь
Зарегистрирован: 2009-06-08
Сообщений: 2,236
Сайт

Re: Вопрос по коду FluxBB 1.5.9.

@noobie, функция fluxbb_invalidate_cached_file() нужна для правильного обновления закешированных данных в OPcache и Alternative PHP Cache.

Offline

#3 2016-02-18 19:44:58

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: Вопрос по коду FluxBB 1.5.9.

FluxBB использует для кеширования файлы php. И его опкод-кешеры бывает очень крепко кешируют. (кешируют кеш big_smile ) Файл уже поменялся, а опкод-кешер не понимает этого, исполняет старую версию.

Эти функции реально НЕ удаляют файл, они сигналят, что старый кеш уже неактуален.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

Подвал доски

Под управлением FluxBB. Хостинг Hostens