我有一个AJAX构建,其功能类似于CMD行框。它允许我在禁用MySQL"从文件导入"的服务器上分解和清理100,000 +行CSV文件。每个客户的"擦洗"过程都是不同的。因此,我构建了这个工具,以允许我包含各种PHP脚本
除了 1 个领域的错误处理外,它运行良好:PHP 错误级别。
我想使用 JS,特别是控制台.log((记录错误
然后考虑以下 JS
$.ajax({
type: 'POST',
dataType: 'text', //also tried json
url: PHP_SCRIPT, //for sake of referance
data: $.param(data), // param object values as POST values
cache: false,
error: function(error) {
console.log("fubar:" + JSON.stringify(error));
如果我在PHP_SCRIPT中导致错误(不使用try/catch和输出作为JSON处理(,那么我得到以下"模棱两可"的回复
stringify:{"readyState":4,"responseText":"","status":500,"statusText":"error"}
问题是:响应文本为空。
PHP_SCRIPT中真正发生的是此错误:
Fatal error: Uncaught UnexpectedValueException: RecursiveDirectoryIterator::
如果我运行PHP脚本,我当然可以看到(我知道为什么会发生这种情况,我的问题不是关于RDI错误(。考虑也可能是其他错误:失败的包含,代码错误等。但是JS和jQuery AJAX似乎并没有"捕获"失败的PHP脚本的主体。
目标:我想"捕获"PHP错误并使用console.log(((甚至是我的临时CMD行框(显示它们,这样我就不必切割PHP_SCRIPT并单独调试每一行。我不明白为什么错误.响应文本没有捕获输出。
理想情况下- 上面的 PHP"致命错误"应该被捕获为 TEXT 并在日志中输出。
注意:我对数据库查询进行了 PDO try/catch 处理,我可以在其中输出 success.error 对象并适当地处理它,捕获 PDO 异常并将其记录到控制台。唉,我认为没有有用的方法来处理其他PHP错误(例如失败的包含或其他常见的PHP错误(。如果这很重要 - 我正在使用带有nonce和die((的WordPress Admin AJAX,我的脚本工作得很好,但是在新脚本的开发过程中捕获错误很烦人。
问题摘要:
- 有没有办法捕获所有/任何未输出为 JSON 和控制台的 PHP 错误.log当 $.ajax 发生错误时?
- 有没有办法捕获PHP错误的"正文"和控制台.log呢?
感谢您对此事的考虑
更新--- 添加了视频以澄清:http://www.screencast.com/t/ZyCeaMyAxBO
像这样的东西将捕获所有未捕获的异常并以 JSON 格式输出消息。
set_exception_handler(function($e) {
$msg = "Error: ";
// maybe you want to treat some differently?
if ($e instanceof PDOException) {
$msg = "Database error: ";
}
// you can access all properties of the exception to build a reply
$msg .= $e->getMessage();
header("Content-Type: text/json");
echo json_encode(["message" => $msg]);
});
您无法捕获所有错误情况,主要是因为您必须在 PHP 中编写错误处理程序,并且一些错误(如解析错误(导致脚本甚至无法编译,因此根本无法执行。
但是使用 set_error_handler((/set_exeception_handler(( 您可能可以覆盖很大一部分......