在浏览器中显示致命/通知错误

时间:2014-07-02 06:23:34

标签: hhvm

我刚刚开始使用hhvm / hack。但是我想向浏览器显示错误,但没有让它工作。

我按照

设置了ini设置
error_reporting(E_ALL);
ini_set('display_errors', '1');

根据ini_get的var_dump,值设置为

string(5) "32767"
string(1) "1"

但是当我做的时候

<?hh

error_reporting(E_ALL);
ini_set('display_errors', '1');

throw new InvalidArgumentException('test');

当我通过浏览器访问该页面时,我会得到一个白色屏幕和500个http标头。所以没有解释致命/异常错误。

然而,我会通过终端hhvm index.php它会显示;

Fatal error: Uncaught exception 'InvalidArgumentException' with message 'test' in /var/www/public/index.php:3
Stack trace:
#0 {main}

所以现在问题。怎么来我在浏览器中没有收到任何消息,但在cli中做什么?第二个是,如何让它在浏览器中工作以显示消息。

我遇到了这个questionthis one。但第一个,好的是相同的,但是没有答案。第二个是关于静态检查的说法。 IE给出了一个int等,至少这是我认为他的意思。

其他question我过来了,看起来像我的,但又没有回答。

根据docs它应该可行。我猜。

详细了解我遇到的文档

尽管可以在运行时设置display_errors(使用函数ini_set()),但如果脚本存在致命错误,则不会产生任何影响。这是因为没有执行所需的运行时操作。

所以我认为异常是一个致命的错误所以我只是$test = $bar + 1;

这让cli转到

Notice: Undefined variable: bar in /var/www/public/index.php on line 8
int(1)

再次在浏览器中

int(1) 

所以我也没有收到通知。

当我重新启动hhvm service hhvm restart时,我也收到错误消息Log file not specified under daemon mode.,不知道它是否与它有任何关系

2 个答案:

答案 0 :(得分:6)

嗯,它花了我一些搜索,但终于找到了答案,see this github post。但它不能显示致命错误。但是会显示通知

所以我写了自己的错误处理程序;它不完整,但现在完成工作。

警告,不检查ini display_errors

set_error_handler(function ($errorNumber, $message, $errfile, $errline) {
    switch ($errorNumber) {
        case E_ERROR :
            $errorLevel = 'Error';
            break;

        case E_WARNING :
            $errorLevel = 'Warning';
            break;

        case E_NOTICE :
            $errorLevel = 'Notice';
            break;

        default :
            $errorLevel = 'Undefined';
    }

    echo '<br/><b>' . $errorLevel . '</b>: ' . $message . ' in <b>'.$errfile . '</b> on line <b>' . $errline . '</b><br/>';
});

答案 1 :(得分:1)

当hhvm失败时,可能会回到php。这很简单 - https://bjornjohansen.no/hhvm-with-fallback-to-php。据我所知,你可以附加每个错误代码的php回退(如404)。那么是不是可以回到显示加载hhvm错误日志的页面的php服务器?