zend框架禁用捕获输出

时间:2011-10-14 15:06:32

标签: php zend-framework

我需要运行后连接关闭处理(发送电子邮件,刷新缓存等),这需要很长时间。所以为了做到这一点,我有一个动作助手,最终将在线下检查是否需要做任何事情并进行处理。

这是输出位的简化版本:

$this->getFrontController()->returnResponse(false);
$response = $this->getResponse();
$body = $response->getBody();
$response->setHeader('Connection', 'close');
ob_start();
echo $body;
$size = ob_get_length();
$response->setHeader('Content-length', $size);
ob_end_flush();
flush();
$this->run();

(注意,实时我打算使用fastcgi_finish_request,但这也需要在本地工作。$ this-> run()运行后处理函数,这里没有输出。)

我一直得到这个OL'讨厌Headers Sent错误,但异常不返回它发生的文件或行号(我猜这是因为Zend中动作助手的性质)。

有些挖掘将错误归结为setHeader()调用。但我想用returnResponse(false)他们不会自动发送?

我的逻辑输出是否正确?

编辑:

另一个问题是getReponse没有返回任何内容,因为尚未调用布局渲染,而是调用Zend_Layout :: getMvcInstance() - > render();给我的布局没有内容呈现给$ layout->内容?

1 个答案:

答案 0 :(得分:0)

我猜ob_end_flush()发送$ body等,但$ this-> run()尝试发送标题。尝试使用类似$ content = ob_get_contents();和ob_end_clean()将缓冲区内容保存到变量并清除缓冲区而不发送。然后,您可以在发送标题后回显$ content。