如何在php中异步调用函数


How to call a function asynchronously in php

我想在用户单击按钮时执行这些函数,但我想在后台异步执行$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));
    }
} 

在标准PHP中没有类似异步任务的东西。您可以安装pthreads,或者必须使用某种Queue。对于Queue,它是这样工作的:

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

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

您将其标记为yii,因此也许可以考虑RESTful API扩展,并研究AJAX和CRUD。这取决于你想走多远。但是我觉得使用yii的RESTful API是AJAX的最佳方式。