在执行脚本之前尝试重定向用户不起作用

在用户提交表单后,我有一个长时间运行的脚本,我试图在实际脚本开始执行之前重定向它们


但我认为该解决方案已过时,因为它什么也没做


这是提交表单后脚本顶部的代码


set_time_limit(0);

header ( 'Connection: close' );

ob_start ();

header ( 'Content-Length: 0' );

header("Location: www.google.com");

ob_end_flush ();

flush ();

ignore_user_abort(true);

预期结果:我的预期结果是让用户点击提交按钮,他们被重定向到 google.com 同时脚本将继续在我的服务器上执行


实际结果:实际发生的是用户只是坐在页面上直到脚本完成执行


白衣非少年
浏览 166回答 3
3回答

慕运维8079593

最简单的方法是 ajax 调用,但正如您所提到的那样,这是行不通的。我建议你排队。您可以在数据库中创建一个表,并在用户提交表单时向该表添加一个条目。并根据需要重定向用户。这不会花很长时间。现在按照您的意愿创建一个 cron 作业,从该表中读取并使用表中的数据执行所需的脚本。脚本完成后从表中删除条目。您可以从此处获得有关队列以及如何创建它们的更多详细信息

30秒到达战场

最安全的方法是使用脚本中的 PHP exec启动外部应用程序(可能是另一个借助 php 可执行文件的 php脚本)。您可以exec($cmd . " > /dev/null &");用于后台执行。发送重定向后,连接可能会关闭。Web 服务器可能会终止您正在执行的 PHP 脚本,例如 nginx 不支持“后台”命令。
打开App,查看更多内容
随时随地看视频慕课网APP