如何在php中异步调用函数

时间:2015-09-15 11:26:57

标签: php yii

我想在用户点击按钮时执行这些功能,但我想在后台异步执行$model->user->email ? $model->sendUserMail(): "";,而其他功能会在点击时执行 这是我的代码

if (isset($_POST['create_send'])) {
    if ($model->save()) {
        $model->order_id = strtotime(date("Y-m-d H:i:s")) + '' + $model->id;

        // send mail
        $model->sendMail();

        //send sms
        $messages = $model->sendSMSMessage($model);

        // create booking history
        $model->createBookingHistory($model , $messages);                     

        $model->user->email ? $model->sendUserMail(): "";

        if($model->booking_stage != 'inprogress'){
            $this->sendPushToSeller($model);
        }

        $model->update();

        $this->redirect(array('index', 'id' => $model->id));
    }
} 

2 个答案:

答案 0 :(得分:1)

标准PHP中没有像Async Tasks那样的东西。您可以安装pthreads,或者您必须使用某种Queue。 使用Queue,它可以像这样工作:

  • 创建邮件发送作业
  • 将该作业推送到队列(例如数据库)
  • 第三方程序(例如cronjob)必须轮询队列并执行任务(发送邮件),如果有的话

或者像@Alan Machado所说,使用AJAX。因此,您的页面可以加载,并且按钮会向发送邮件的服务器发送AJAX请求。

答案 1 :(得分:0)

你标记了yii,所以也许考虑一个RESTful API扩展,并研究AJAX和CRUD。这取决于你想要走多远。但我觉得使用yii的RESTful API是AJAX的最佳选择。