Выяснилось, что когда задача выполняется из-под системного (именно системного) крона, массив
$user->data
пустой, а точнее состоит из единственного элемента - ['user_id' => 1]
. Соответственно, ошибка возникала на первом же SQL-запросе, который хотел записать, к примеру, 'username' или 'user_colour'. Ну а поскольку mysqli_query() в phpBB вызывается через @, в логах было пусто.Повторяется легко:
- берём любое расширение с кроном
- в метод run() добавляем строчку
error_log(print_r($this->user->data, true));
- в базе данных при необходимости уменьшаем значение ***_last_gc, чтобы задачу активировать
- дёргаем
bin/phpbbcli.php cron:run
(через системный крон или вручную через консоль)- в логе видим:
Код: Выделить всё
Array
(
[user_id] => 1
)
Выход такой: если крон-задача использует объект $user, на случай вызова задачи через системный крон необходимо добавить в неё следующее:
Код: Выделить всё
if (!$this->user->is_setup()) {
$this->user->session_begin();
$this->auth->acl($this->user->data);
$this->user->setup();
}