Yii2 не может зарегистрировать функцию отключения в действии контроллера

У меня есть действия контроллера следующим образом:

public function actionTest()
{
set_time_limit(1);
register_shutdown_function(function()
{
var_dump('shutdown');
});

while(true){} //infinite loop
}

И я все еще получаю фатальную ошибку «Максимальное время выполнения превысило 1 секунду»

Если я не сплю или превышаю время выполнения, вызывается функция выключения.
В соответствии с http://php.net/manual/en/function.register-shutdown-function.php#33575 и несколько примеров из интернета, завершение работы должно быть вызвано, даже если время выполнения превышено.

Как я должен обработать ошибку времени выполнения?

2

Решение

Бьюсь об заклад, PHP бросает фатальную ошибку до запуск вашей функции выключения. Что-то вроде «Фатальная ошибка: превышено максимальное время выполнения». Yii; обработчик ошибок ловит все ошибки PHP, отображает сообщение об ошибке и умирает до того, как PHP получит возможность запустить вашу функцию. Таким образом, ваша функция никогда не будет выполнена.

Есть несколько решений этой проблемы. Во-первых, вы можете полностью отключить обработку ошибок PHP в Yii, добавив эту строку в index.php,

define(YII_ENABLE_ERROR_HANDLER, false);

Во-вторых, вы можете попробовать отключить сообщения об ошибках в php.ini, используя error_reporting или же display_errors директивы.

В-третьих, вы можете отлавливать ошибки PHP, используя блок try-catch и перехватывая ErrorException учебный класс. Просто поймайте исключение и ничего не делайте:

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector