gpt4 book ai didi

php - 从 error_handler 访问变量

转载 作者:行者123 更新时间:2023-12-04 06:01:09 24 4
gpt4 key购买 nike

我有一个只能通过 ajax 访问的 php 文件。 ajax 调用只需要格式为 json_encode 的数据d 输出。我正在尝试创建一个自定义错误处理函数来捕获 php 错误,而不是直接输出它们,而是将它们传递给它们为 json 解析器编码的数组。

到目前为止我有

// error handler function
function handleErrors($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
// This error code is not included in error_reporting
return;
}

$response['php_error'][] = "Error [$errno] - $errstr on line $errline in file $errfile";

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

set_error_handler("handleErrors");

//do other stuff that might trigger php errors

if ($result===true){
$response['success'] = true;
}else{
$response['success'] = false;
$response['error'] = $result;
$response['request'] = json_encode($_REQUEST);
}

echo json_encode($response);

我的问题是 $response数组超出了文档其余部分的访问范围,因此它将在 json 对象中输出。是否有某种方法可以通过引用将变量传递到自定义函数中,或者我忽略了另一种方法?

最佳答案

在 OOP 上下文中,您可以定义 $response作为属性(property)。

class myclass {

var $response;

function __construct()
{
set_error_handler(array($this, 'handleErrors'));
}

function handleErrors($errno, $errstr, $errfile, $errline)
{
if ( ! (error_reporting() & $errno))
{
// This error code is not included in error_reporting
return;
}

$this->response['php_error'][] = "Error [$errno] - $errstr on line $errline in file $errfile";

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

function outputAjax()
{
// my code

if ($result === true)
{
$this->response['success'] = true;
} else
{
$this->response['success'] = false;
$this->response['error'] = $result;
$this->response['request'] = json_encode($_REQUEST);
}

echo json_encode($this->response);
}

}

关于php - 从 error_handler 访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8887874/

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