我刚刚开始使用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中做什么?第二个是,如何让它在浏览器中工作以显示消息。
我遇到了这个question和this 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.
,不知道它是否与它有任何关系
答案 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服务器?