我需要运行后连接关闭处理(发送电子邮件,刷新缓存等),这需要很长时间。所以为了做到这一点,我有一个动作助手,最终将在线下检查是否需要做任何事情并进行处理。
这是输出位的简化版本:
$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->内容?
答案 0 :(得分:0)
我猜ob_end_flush()发送$ body等,但$ this-> run()尝试发送标题。尝试使用类似$ content = ob_get_contents();和ob_end_clean()将缓冲区内容保存到变量并清除缓冲区而不发送。然后,您可以在发送标题后回显$ content。