【发布时间】:2019-06-12 22:09:31
【问题描述】:
在用户提交表单后我有一个长时间运行的脚本,我试图在实际脚本开始执行之前重定向它们
我试图在这里实现接受的答案How to cause a redirect to occur before php script finishes?
但我认为解决方案已经过时,因为它什么也没做
这是提交表单后脚本顶部的代码
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,同时脚本将继续在我的服务器上执行
实际结果:实际发生的是用户只是坐在页面上,直到脚本完成执行
【问题讨论】:
-
您拥有什么网络服务器软件以及 PHP 如何与网络服务器软件(CGI、其他接口)交互也很重要
-
我认为与仅在后台运行脚本并重定向
exec('php script.php >/dev/null &'); header("Location: www.google.com");相比,这是一种糟糕的方法 -
您可以在发送请求后使用 Ajax 提交并在 JavaScript 中重定向。 Ajax 是异步的,因此在等待回复时不必停止
-
@Tim Morton 我愿意,但脚本大约有 1600 行我没有编写的未注释代码,而且我没有 2-3 天的时间来重写它以便可以通过 ajax 完成(相信我,我更愿意)
-
这个概念相当简单——添加一个 onsubmit 监听器来拦截表单提交、发布和重定向。你不需要重写任何东西,只需添加一个观察者:
$(function() { $('#my-form').on("submit",function(e) { e.preventDefault(); // do your ajax and resubmit
标签: php