【问题标题】:Why is Slim Framework's phpErrorHandler not working?为什么 Slim Framework php 错误处理程序不起作用?
【发布时间】:2018-04-06 01:55:26
【问题描述】:

我无法让 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');
        };
    }
]);

当我从代码中抛出异常时,将调用错误处理程序并且我的输出是“应用程序错误”。但是,当我从代码中抛出错误或引入语法错误时,不会调用 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();

我能够发现错误。但是,这会导致一些我更愿意避免的讨厌的副作用。不过,这告诉我的是,它不是阻止我捕捉错误的配置设置。

【问题讨论】:

  • 我的系统设置是 PHP 7.1。我无法重现您的问题。抛出 ExceptionError 都会触发 phpErrorHandler 处理程序,因为这两个类都实现了 Throwable 接口。
  • 只是好奇,你能发布你的phpinfo() 输出吗?
  • 我的猜测是 $c['response'] 与函数接收的 $response 参数不同;试试这个

标签: php reporting slim slim-3


【解决方案1】:

我遇到了同样的问题,并且被提到 phpErrorHandler 功能的 Slim 3 文档稍微误导了。但是 phpErrorHandler 直到 3.2.0 版本才被添加到 Slim 中:https://github.com/slimphp/Slim/releases/tag/3.2.0

如果您使用的是

【讨论】:

    【解决方案2】:

    也许尝试禁用display_startup_errors

    我的配置:

    error_reporting(E_ALL);
    ini_set("display_errors", 0);
    ini_set('display_startup_errors', 0);
    

    编辑: die('oops'); 也不是错误,它只会死/退出脚本的执行,之后什么都不会执行

    【讨论】:

      猜你喜欢
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2021-10-29
      相关资源
      最近更新 更多