gpt4 book ai didi

PHP/XDebug 输出到变量?

转载 作者:行者123 更新时间:2023-11-28 20:37:29 25 4
gpt4 key购买 nike


我正在开发一个 Web 应用程序,并使用 PHP 和 javascript/jQuery,我遇到的问题是 XDebug 的警告/错误输出。我从 AJAX 调用 PHP 脚本来检索数据,其中大部分返回数组,我使用 JSON 字符串进行传输。我遇到的问题是,如果存在警告/错误,XDebug 会在输出中写入 HTML 标记,并且当我尝试在 javascript 中解码 JSON 字符串时,它会失败。有没有办法配置 XDebug 将它们输出到变量中,以便我仍然可以在需要时显示它们,而不会弄乱我的 JSON 解码?我试图展示一个简单的例子:

RemoveFile.php:

if (!unlink($_GET['Filename'])){ //if file not found XDebug will output warning here
$errors[] = "File not found";

echo json_encode($errors);
}

RemoveFile.js:

function RemoveFile(filePath){
$.get('RemoveFile.php', {
Filename: filePath
}).done(function (data){
var dataArray = JQuery.parseJSON(data); //Fails if XDebug outputs HTML
}
}

更新

<小时/>

我想出了我需要做什么,因为我不想打开日志文件来检查错误并在错误发生时显示错误以使调试更容易,所以我创建了一个自定义错误处理程序来包含在我不想输出错误但仍输出其他文件的文件中:

VarErrorHandler.php:

function VarErrorHandler($errno, $errstr, $errfile, $errline){
switch ($errno) {
case E_USER_ERROR:
$errors[] = "ERROR: Fatal error on line $errline in file $errfile [$errno] $errstr";
exit(1);
break;

case E_USER_WARNING:
$errors[] = "WARNING: [$errno] $errstr";
break;

case E_USER_NOTICE:
$errors[] = "NOTICE: [$errno] $errstr";
break;

default:
$errors[] = "Unknown error type: [$errno] $errstr";
break;
}

/* Don't execute PHP internal error handler */
return true;
}

$old_error_handler = set_error_handler("VarErrorHandler");

所以现在在我不想输出错误的任何文件中添加:

//include and set custom error handler
require_once("VarErrorHandler.php");

//to stuff here

//Reset original error handler
restore_error_handler();

然后通过显示错误数组将它们显示在客户端,即

function RemoveFile(filePath){
$.get('RemoveFile.php', {
Filename: filePath
}).done(function (data){
var dataArray = JQuery.parseJSON(data); //Fails if XDebug outputs HTML

//Alert Errors
alert(dataArray.errors.join("\n"));
}
}

最佳答案

如果您的代码中有错误/警告/通知,那么它们的存在是有原因的 - 在投入生产之前修复问题。

在生产环境中,您应该将 PHP 配置为记录错误而不是显示错误。在生产环境的 php.ini 中:

error_log = /path/to/php-error.log
log_errors = On
display_errors = Off

或者,您可以在运行时更改代码中的设置:

ini_set("display_errors", 0);
ini_set("log_errors", 1);
ini_set("error_log", "/path/to/php-error.log");

在这里阅读更多相关信息:

Best way to suppress php errors on production servers

关于PHP/XDebug 输出到变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15089917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com