我有一个控制器,除其他外,发送电子邮件。我需要在电子邮件发送开始之前向用户回复消息(否则看起来屏幕卡住了) 那么,在我到达控制器的末尾之前,如何回显在控制器开始时设置的消息,或者,我是否应该在另一个方向上思考所有消息?
答案 0 :(得分:1)
尝试一下:
<?php
//...
public function someAction()
{
echo "Something";
ob_flush();flush();
}
此forum post讨论了您的问题。他们建议:
<?php
$frontController = Zend_Controller_Front::getInstance();
$frontController->setParam('disableOutputBuffering', true);
然后执行ob_flush();flush();
技术。
答案 1 :(得分:1)
对于问题的邮件部分。
根据时间 - 请求消息需要多久发送后 - 另一种可能性是创建消息队列(可能是db表),将记录写入该表,然后运行cron进程消耗队列,发送任何未发送的消息,将其标记为已发送等等。
答案 2 :(得分:0)
您可以尝试使用关机功能发送电子邮件。如果您还刷新输出缓冲区,这将确保用户首先看到呈现的页面。在您的代码调用中:
register_shutdown_function('send_email', $params);
然后有一个看起来像这样的函数:
function send_email($params) {
ob_flush();flush();
// Send your email here
}