防止PHP警告和错误破坏json解析器?

时间:2017-03-05 00:12:15

标签: php json ajax error-handling

我有一个php脚本,它从数据库中读取记录并返回一个json对象。我在脚本中有错误处理,因此如果抛出异常或发生其他错误,我仍然会返回格式正确的json响应(带有错误代码和所有错误)。这有效。

然而:如果PHP觉得它有话要说,它在发送json响应之后仍然会说出来。这打破了客户端的json解析器。因此,代替ajax调用成功并显示错误消息,例如“未找到数据库文件”,调用失败并出现json解析器错误,这没有用(因为它会覆盖原始的,保留的错误信息):

SyntaxError: JSON.parse: unexpected non-whitespace character 
after JSON data at line 1 column 120 of the JSON data

我可以用 error_reporting(0)来抑制PHP的消息 - 但是有更好的方法吗?代码(大纲)如下:

<?php
header('Content-type: application/json');
const RESP_OK = 0;
const RESP_EXCEPTION = 1;
try {
    // do the database stuff and build $response    
     $response['exitcode'] = RESP_OK;
} catch ( Exception $e ) {
    // put error info in the response
    $response['exitcode'] = RESP_EXCEPTION;
    $response['error'] = 'code: ' . $e->getCode() . ' (line ' .
       $e->getLine() . ') message: ' . $e->getMessage();

} finally {
    // always send back a response
    echo json_encode( $response );
    error_reporting(0);
    // also close the db here etc.
}
?>

1 个答案:

答案 0 :(得分:2)

错误报告是一种调试功能,因此它可以/应该/将在生产环境中关闭,而不是在开发中关闭。

您应该以这样的方式为您编写代码,使代码涵盖所有代码。

分析每个错误和警告,现在看看这可以通过'PHP不觉得它有话要说'的方式来处理。