Источник: http://phpbbguru.net
Для этого необходимо выполнить ряд действий:
1) создать параметр конфигурации, задающие периодичность выполнения скрипта. Для этого необходимо присвоить имя переменной и задать её значение - в секундах (это и будет периодичность выполнения скрипта). Допустим, переменную произвольно назовем my_script_gc. Внести её можем напрямик в базу, добавив в таблицу phpbb_config строку, где config_name будет равно my_script_gc, а config_value равно, например, 60 (т.е. периодичность - ежеминутно).
Например :
- Код: Выделить всё • Развернуть
INSERT INTO phpbb_config (config_name, config_value) VALUES ('my_script_gc', '60');
В папке cache удалим кэш глобальных значений конфигурации - файл data_global.php.
2) Аналогично, создаем значение для хранения времени последнего выполнения нашей крон-функции, оно будет динамическим (т.е. не кэшируемым):
- Код: Выделить всё • Развернуть
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES (my_script_last_gc', '0', 1);
3) Добавляем задание в крон для периодического выполнения. При этом допустим, что наш скрипт, содержащий необходимую для выполнения функцию my_cron_function, называется my_cron.php и находится в папке includes.
Реализуем:
- Код: Выделить всё • Развернуть
OPEN
cron.php
FIND
case 'prune_forum':
BEFORE, ADD
case 'my_cron_function':
if (time() - $config['my_script_gc'] <= $config['my_script_last_gc'])
{
break;
}
include_once($phpbb_root_path . 'includes/my_cron.' . $phpEx);
if ($use_shutdown_function)
{
register_shutdown_function('my_cron_function');
}
else
{
my_cron_function();
}
break;
4) В файле includes/functions.php находим функцию page_footer, в ней задаем условия для срабатывания крона, например:
- Код: Выделить всё • Развернуть
OPEN
includes/functions.php
FIND
else if (time() - $config['session_gc'] > $config['session_last_gc'])
{
$cron_type = 'tidy_sessions';
}
AFTER, ADD
else if (time() - $config['my_script_gc'] > $config['my_script_last_gc'])
{
$cron_type = 'my_cron_function';
}
При этом важно сначала отладить правильную работу самой функции, запуская её напрямую без условий, например, в отдельном скрипте. Иначе, если при ее выполнении будут возникать ошибки, работа крона в целом может быть нарушена.
Важное замечание: в обязательном порядке в самом конце функции, вызываемой в кроне (в нашем случае, my_cron_function), должно записываться в таблицу конфигурации время последнего выполнения функции. В нашем случае (для примера)
- Код: Выделить всё • Развернуть
set_config('my_script_last_gc', time(), true);
Проверить, какая именно задача выполняется кроном в данный момент, можно, просмотрев исходный код главной страницы в браузере, в самом низу его (в футере) можно нати строку (если в этот момент выполняется крон) наподобие
- Код: Выделить всё • Развернуть
<img src="./cron.php?cron_type=my_cron_function" width="1" height="1" alt="cron" /></div>
P.S Вот наткнулся на этот мануал , мне показался интересным.