У меня проблемы с получением phpErrorHandler для работы. Я использую последнюю версию Slim, и мой сервер работает под управлением PHP 7.1.
use \Slim\App as App;
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
$app = new App([
'errorHandler' => function ($c) {
return function ($request, $response, $error) use ($c) {
return $c['response']
->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('application error');
};
},
'phpErrorHandler' => function ($c) {
return function ($request, $response, $error) use ($c) {
return $c['response']
->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('runtime error');
};
}
]);
Когда я выбрасываю исключение из моего кода, вызывается обработчик ошибок, и мой вывод — «ошибка приложения». Однако, когда я выкидываю Error из своего кода или вводю синтаксические ошибки, phpErrorHandler не вызывается и, в зависимости от моих настроек, PHP выдает сообщение об ошибке с помощью трассировки стека.
Я пытался добавить
ini_set('display_errors', 0); // do not produce the standard output when an error occurs
error_reporting(-1); // enable error reporting (is this required for Slim?)
Но любые изменения, которые я делаю в этой конфигурации, похоже, не влияют на то, вызывается ли мое закрытие или нет.
-редактировать-
Я попытался выполнить часть Javascript, которая входит в консоль. Это работает для errorHandler, а не для phpErrorHandler. Также простой
die('oops');
ничего не делает в phpErrorHandler. Похоже, что обратный вызов вообще не вызывается.
Если я положу попробовать / поймать
$app->run();
Я умею ловить ошибки. Однако это вызывает некоторые неприятные побочные эффекты, которых я предпочитаю избегать. Однако это говорит мне о том, что это не параметр конфигурации, который удерживает меня от перехвата ошибок.
У меня была та же проблема, и я немного сбился с толку документацией Slim 3, в которой упоминается функция phpErrorHandler. Однако, phpErrorHandler не был добавлен в Slim до версии 3.2.0: https://github.com/slimphp/Slim/releases/tag/3.2.0
Если вы используете Slim версию < 3.2.0, попробуйте обновить.
может быть попытаться отключить display_startup_errors
?
мой конфиг:
error_reporting(E_ALL);
ini_set("display_errors", 0);
ini_set('display_startup_errors', 0);
РЕДАКТИРОВАТЬ:
также die('oops');
это не ошибка, он просто умрет / завершит выполнение скрипта, после этого ничего не будет выполнено