我在laravel 4中遇到输出缓冲问题。 这段代码在其他框架中运行良好,但在laravel中我为ob_get_flush()
导致致命错误class Ajax
{
public function __construct()
{
if ( Request::ajax() )
{
ob_clean();
ob_start(function(){});
register_shutdown_function(array(&$this,'setOutput'));
}
}
public function setOutput()
{
$html = ob_get_flush();
}
}
错误:
ob_get_flush(): failed to delete and flush buffer. No buffer to delete or flush
答案 0 :(得分:2)
看起来你正试图在ob_start()
编辑之前冲洗。
答案 1 :(得分:1)
它"只是"通知,而不是错误。您的缓冲区内容为空,因此PHP(通过laravel)向您发送通知,因为它与ob_get_flush
无关。也许在您尝试的其他框架中禁用通知。根据{{3}},你可以做这样的事情,如果你想让它工作,即使你的缓冲区是空的:
public function setOutput()
{
if (ob_get_level() > 1) $html = ob_get_flush();
}
希望它会有所帮助!
答案 2 :(得分:0)
在Request :: ajax()返回true之前是否可能调用该类?
如果是这样,那么你的构造函数条件将返回false并且不会调用ob_start。也许您可以将该部分移出条件或尝试将其重写到您将数据写入对象的位置,然后调用renderOutput(),此方法将以正确的顺序调用ob。