如何在使用PHP执行代码之前发送更快的响应
我需要在使用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
$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);