在我的linux服务器上,我收到了一个php错误,但我看不到错误,为什么?

时间:2012-10-23 15:34:12

标签: php linux apache yii phpexcel

我的PHP代码(导出pdf和excel功能,我正在使用Yii框架)在我的本地机器上运行良好。 但是当我把代码放在linux服务器上时 我收到一个错误。我使用echo逐步调试它,最后我发现它在这一步中失败了。 $ objWriter->保存( 'PHP://输出'); (使用PHPExcel)。

但是我无法看到它是什么错误。

我设置了display_errors = On,并设置了error_log。 但我仍然无法看到错误信息。

1 个答案:

答案 0 :(得分:2)

确保您拥有以下设置:

error_reporting(E_ALL); // or possibly: E_ALL & ~E_NOTICE
ini_set('display_errors', TRUE);
ini_set('scream.enabled', TRUE); // this overrides the @ operator

如果您希望任何错误停止执行脚本,请定义错误处理函数:

function my_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {
    file_put_contents(
        'custom_log_file.log',
        '#'.$errno.' '.$errfile.':'.$errline.' '.$errstr
    );
    // throw new Exception('#'.$errno.' '.$errfile.':'.$errline.' '.$errstr);
    die('#'.$errno.' '.$errfile.':'.$errline.' '.$errstr);
}
set_error_handler('my_error_handler');

如果你选择从你的错误处理函数中抛出异常(很可能你不会期望它只是出于调试目的),你可以设置异常处理程序。

function my_exception_handler() {
     // here you code some nice visuals for your error handling
}
set_exception_handler('my_exception_handler');

在这两种情况下,您都可以var_dump(debug_backtrace());查看发生错误的数据上下文。

如果PHP文件是第一次访问(即它的URL位于浏览器的地址栏中)并且其中存在语法错误,则无错误报告机制会显示该错误。

您可以使用linux CLI php -l filename.php检查文件中的语法错误。或者,您可以创建另一个仅包含filename.php包含的文件x.php。