【发布时间】:2019-03-02 16:12:12
【问题描述】:
我有一个 AJAX 构建,其功能类似于 CMD 行框。它允许我在禁用 MySQL 'IMPORT from FILE' 的服务器上分解和清理 100,000+ 行 CSV 文件。每个客户的“擦洗”过程都不同。因此我构建了这个工具来允许我包含各种 PHP 脚本
它的工作原理很棒,除了 1 个区域的错误处理:PHP 错误级别。
我想用 JS 记录错误,特别是 console.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"}
问题出在:responseText 为空。
PHP_SCRIPT 中真正发生的是这个错误:
Fatal error: Uncaught UnexpectedValueException: RecursiveDirectoryIterator::
我当然可以看看我是否运行了 PHP 脚本(我知道它为什么会发生,我的问题不是关于 RDI 错误)。考虑它也可能是其他错误:失败的包含,代码错误等。但是 JS 和 jQuery AJAX 似乎并没有“捕获”失败的 PHP 脚本的主体。
目标:我想“捕获”PHP 错误并使用 console.log()(甚至我的临时 CMD 行框)显示它们,这样我就不必切断 PHP_SCRIPT 和调试每行分开。我不明白为什么 error.responseText 不捕获输出。
理想情况下 - 上面的 PHP“致命错误”应该已被捕获为 TEXT 并在日志中输出。
注意:我对 DB 查询进行了 PDO 尝试/捕获处理,我可以在其中输出 success.error 对象并进行适当处理,捕获 PDO 异常并将其记录到控制台。唉,我看不到任何有用的方法来处理其他 PHP 错误(例如失败的包含或其他常见的 PHP 错误)。如果重要的话——我正在使用带有 nonce 和 die() 的 WordPress Admin AJAX,并且我的脚本运行良好,但是在开发新脚本期间捕获错误很烦人。
问题摘要:
- 有没有办法在 $.ajax 发生错误时捕获所有/任何未输出为 JSON 的 PHP 错误并在控制台记录它们?
- 有什么方法可以捕获 PHP 错误的“主体”并在 console.log 中记录它吗?
感谢您对此事的考虑
更新--- 添加视频澄清:http://www.screencast.com/t/ZyCeaMyAxBO
【问题讨论】:
-
出于安全原因,这样做不是很好的做法。 PHP 错误应该只在开发模式下启用
-
@miken32 - 好的,似乎 set_exception_handler 可能是我去这里的方式。我可以尝试/捕获 PDO 错误并将它们发送到 success.data JS 级别并记录它们。如果我理解正确,您是在说 set_exception_handler 可以捕获 PHP 错误、死掉,然后将错误输出为 JSON,对吗? PS:我用这个视频更新了描述 => screencast.com/t/ZyCeaMyAxBO
-
是的,编写一个异常处理函数,将异常详细信息输出为 JSON。 (而且没有人会观看视频来回答问题!)
-
好的...感谢您的阅读然后...感谢。
标签: php