Работа с кэшем

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Работа с кэшем

Сообщение FladeX »

Подскажите, как работать с кэшем?
Нужно для мода sitemap проверять, есть ли в кэше сгенерированный xml. Если есть, то выводить его, если нет, то генерить. При этом нужна возможность установки срока действия кэшированного файла.
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Работа с кэшем

Сообщение nissin »

В данном случае работать стандартными средствами phpbb думаю не получится (слишком большой объём).
Поэтому просто загонять в кэш флаг через $cache->put и если не получится его забрать через $cache->get (возращаемое значение === false), то формировать sitemap заново.
А сам файл можно класть куда угодно, хоть в тот же store например.
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: Работа с кэшем

Сообщение FladeX »

И все-таки хотелось бы попробовать именно средствами phpBB. К примеру, кэшируемый файл имеет небольшой размер - как в таком случае сделать его кэширование?
И кстати - а какое ограничение на размер файла? Приблизительно.
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Работа с кэшем

Сообщение nissin »

Загоняете в массив и работаете через $cache->put и $cache->get.
Размер зависит от того сколько памяти выделено для работы php.
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: Работа с кэшем

Сообщение FladeX »

А в оригинальных файлах где можно посмотреть пример работы с кэшем?
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Работа с кэшем

Сообщение nissin »

Собственно сами методы описаны в includes/acm/acm_file.php.
Пример использования из includes/auth.php

Код: Выделить всё

	/**
	* Init permissions
	*/
	function acl(&$userdata)
	{
		global $db, $cache;

		$this->acl = $this->cache = $this->acl_options = array();
		$this->acl_forum_ids = false;

		if (($this->acl_options = $cache->get('_acl_options')) === false)
		{
			$sql = 'SELECT auth_option_id, auth_option, is_global, is_local
				FROM ' . ACL_OPTIONS_TABLE . '
				ORDER BY auth_option_id';
			$result = $db->sql_query($sql);

			$global = $local = 0;
			$this->acl_options = array();
			while ($row = $db->sql_fetchrow($result))
			{
				if ($row['is_global'])
				{
					$this->acl_options['global'][$row['auth_option']] = $global++;
				}

				if ($row['is_local'])
				{
					$this->acl_options['local'][$row['auth_option']] = $local++;
				}

				$this->acl_options['id'][$row['auth_option']] = (int) $row['auth_option_id'];
				$this->acl_options['option'][(int) $row['auth_option_id']] = $row['auth_option'];
			}
			$db->sql_freeresult($result);

			$cache->put('_acl_options', $this->acl_options);
			$this->acl_cache($userdata);
		}
		else if (!trim($userdata['user_permissions']))
		{
			$this->acl_cache($userdata);
		}

		$user_permissions = explode("\n", $userdata['user_permissions']);

		foreach ($user_permissions as $f => $seq)
		{
			if ($seq)
			{
				$i = 0;

				if (!isset($this->acl[$f]))
				{
					$this->acl[$f] = '';
				}

				while ($subseq = substr($seq, $i, 6))
				{
					// We put the original bitstring into the acl array
					$this->acl[$f] .= str_pad(base_convert($subseq, 36, 2), 31, 0, STR_PAD_LEFT);
					$i += 6;
				}
			}
		}

		return;
	}
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: Работа с кэшем

Сообщение FladeX »

Спасибо! Буду разбираться)
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
PoTaP0ff
phpBB 1.2.0
Сообщения: 18
Стаж: 17 лет 6 месяцев
Благодарил (а): 1 раз

Re: Работа с кэшем

Сообщение PoTaP0ff »

А как кеш очистить, что то не понял.
Аватара пользователя
Izya
Former team member
Сообщения: 408
Стаж: 18 лет
Откуда: Абакан, Сибирь
Благодарил (а): 1 раз
Поблагодарили: 28 раз

Re: Работа с кэшем

Сообщение Izya »

Код: Выделить всё

$cache->purge();
Изображение
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: Работа с кэшем

Сообщение FladeX »

Как удалить из кэша определенный файл?
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Работа с кэшем

Сообщение nissin »

Код: Выделить всё

$cache->destroy('_my_cached_var');
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Re: Работа с кэшем

Сообщение FladeX »

Благодарю!
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы

Вернуться в «Для авторов (phpBB 3.0.x)»