gpt4 book ai didi

php - 如何阻止 PHP 输出缓冲吃掉错误消息?

转载 作者:可可西里 更新时间:2023-10-31 22:16:55 26 4
gpt4 key购买 nike

好吧,现在我已经深入了解了它,我意识到这是一个愚蠢的问题,而且是错误的。事实证明,我维护的遗留代码的作者使用 php_init 语句将错误日志劫持到另一个文件。劫持是在打开输出缓冲的同时发生的,使其看起来好像输出缓冲正在丢弃我的错误消息。

所以,版主先生,请随意删除此内容。感谢那些善意回答的人。


给定以下 PHP 脚本:

<?php 
error_log('test');

ob_start();

error_log('test2');

ob_end_flush();
?>

我得到以下错误日志输出:

[04-Feb-2010 11:30:38] test

为什么输出缓冲会占用我的错误消息?我怎样才能让它停止?

或者,是否有另一种方法可以将消息从输出缓冲区中偷运出去,或者它只是一个黑洞?

(使用PHP 5.2.4-2ubuntu5.10)

最佳答案

异常穿透ob_start()屏蔽

如果你想停止PHP脚本的执行,不如抛出一个Exception,它会穿透ob_start(),ob_end_flush()的屏蔽

echo 'before output buffer';
ob_start();
throw new Exception('this will be seen');
ob_end_flush();

考虑创建一个 Logger 类

不要用你的方法直接输出,而是使用一个类或一个holder,它在你的方法中合并了日志(或error方法)例),例如:

class Logger
{
private $_messages = array();

public function __construct()
{
$this->_messages['errors'] = array();
$this->_messages['debug'] = array();
}

public function error($msg)
{
$this->_messages['errors'][] = $msg;
}

public function debug($msg)
{
$this->_messages['debug'] = $msg;
}

public function getErrors()
{
return $this->_messages['errors'];
}

}

$logger = new Logger();

$logger->error('error1');

ob_start();

$logger->error('error2');

ob_end_flush();

print_r($logger->getErrors());

这样你就可以依赖 holder 对象,它不会丢弃消息并得到你想要显示的所有错误

关于php - 如何阻止 PHP 输出缓冲吃掉错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2201841/

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