如何在使用PHP执行代码之前发送更快的响应

如何在使用PHP执行代码之前发送更快的响应,php,Php,我需要在使用PHP执行部分代码之前发送响应。我在下面解释我的代码 $name=$_POST['name']; $email=$_POST['email']; $mobile=$_POST['mobile']; $description=mysqli_real_escape_string($connect,$_POST['description']); $date=date('m/d/Y H:i:s A

我需要在使用PHP执行部分代码之前发送响应。我在下面解释我的代码

$name=$_POST['name'];
            $email=$_POST['email'];
            $mobile=$_POST['mobile'];
            $description=mysqli_real_escape_string($connect,$_POST['description']);
            $date=date('m/d/Y H:i:s A');
            $sql=mysqli_query($connect,'INSERT INTO db_feedback (name,email,mobile,description,date_added) values ("'.$name.'","'.$email.'","'.$mobile.'","'.$description.'","'.$date.'")');
            if ($sql) {
                $result=array("msg"=>"Thank You !! Your feedback is sucessfully submitted.","status"=>1);
                echo json_encode($result);
                $email='info@thespesh.com';
                $name='Admin';
                $msgSub="User Feedback";
                $message=$description;
                $uname=$name;
                $uphone=$mobile;
                $uemail=$email;
                ob_start();
                include "feedbackTemplate.php";
                $msg_body=ob_get_clean();
                $is_send=sendMail($email,'noreply@thespesh.com',$msgSub,$msg_body);
            }else{
                $result=array("msg"=>"Failed","status"=>0);
                echo json_encode($result);
            }

在这里,我在将用户数据插入数据库后发送电子邮件。在执行电子邮件代码部分之前,我需要echo json_encode$result;将向用户发送响应,然后电子邮件部分将执行。

最安全的方法是将任务发送到该人员的数据库中,然后从crontab启动脚本来处理这些任务。脚本可以安排为每5分钟运行一次。但是请注意,处理任务不会超过5分钟,因此不会同时运行多个任务。我通常限制在一次脚本运行时处理的任务数,如果花费太多时间,则使用timeout shell命令终止脚本

现在我使用Redis或RabbitMQ和叉工。在Google中查找php后台任务并检查。

如果您正在运行php fpm,那么您应该这样做,因为现在是2018年。而且所有流行的web服务器都支持它,那么您就可以使用该功能了

这对你有什么好处?您执行数据库插入,向用户发送响应,调用fastcgi_finish_requets,将输出发送给用户,然后调用您的邮件代码

长时间运行的任务在用户收到响应后执行

代码:

注意:这仅在您使用PHP fpm运行PHP时可用。

您是使用PHP fpm还是使用最差的mod_PHP和Apache?我这样问是因为为了实现你想要的,你需要改变执行模式——电子邮件应该在响应发送后发送,无论你用输出缓冲功能做什么——它都不会切断它。
echo json_encode($result);

// Output is sent to user, but below code resumes execution
fastcgi_finish_request(); 

// This basically resumes in background
include "feedbackTemplate.php";
$msg_body=ob_get_clean();                

$is_send=sendMail($email,'noreply@thespesh.com',$msgSub,$msg_body);