Php 在执行脚本前尝试重定向用户无效
在用户提交表单之后,我有一个长时间运行的脚本,我试图在实际脚本开始执行之前重定向它们 我试图在这里实现公认的答案 但我认为这个解决方案已经过时了,因为它什么都不起作用 以下是提交表单后脚本顶部的代码Php 在执行脚本前尝试重定向用户无效,php,Php,在用户提交表单之后,我有一个长时间运行的脚本,我试图在实际脚本开始执行之前重定向它们 我试图在这里实现公认的答案 但我认为这个解决方案已经过时了,因为它什么都不起作用 以下是提交表单后脚本顶部的代码 设置时间限制(0); 标题(‘连接:关闭’); ob_start(); 标题('内容长度:0'); 标题(“位置:www.google.com”); ob_end_flush(); 同花顺(); 忽略用户中止(true); 预期结果:我的预期结果是用户单击提交按钮,他们被重定向到google.co
设置时间限制(0);
标题(‘连接:关闭’);
ob_start();
标题('内容长度:0');
标题(“位置:www.google.com”);
ob_end_flush();
同花顺();
忽略用户中止(true);
预期结果:我的预期结果是用户单击提交按钮,他们被重定向到google.com,同时脚本将继续在我的服务器上执行
实际结果:实际发生的是用户只是坐在页面上,直到脚本完成执行
设置时间限制(0);
忽略用户中止(true);
ob_start();
//标题(‘连接:关闭’)//你不需要这条线,因为你正在重定向
标题('内容长度:0');
标题(“位置:www.google.com”);
ob_end_flush();
同花顺();
\*浏览器将在此点重定向*\
忽略用户中止(true);
设置时间限制(0);
\*这一行之后的长时间运行脚本*\
最安全的方法是从脚本中使用php启动外部应用程序(可能是借助php可执行文件的另一个php脚本)。您可以使用
exec($cmd.>/dev/null&')代码>用于后台执行
发送重定向后,连接可能会关闭。web服务器可能会终止正在执行的PHP脚本,例如nginx不支持“后台”命令 最简单的方法是ajax调用,但正如您所提到的,这不起作用。我建议你排队。
您可以在数据库中创建一个表,并在用户提交表单时向该表添加条目。并根据需要重定向用户。这不会花很长时间
现在创建一个cron作业,按照您喜欢的频率读取该表,并使用该表中的数据执行所需的脚本。脚本完成后,从表中删除条目
您可以了解更多关于队列的详细信息,以及如何从中创建队列。您拥有什么web服务器软件以及PHP如何与web服务器软件(CGI,一些其他接口)交互也很重要。我认为与仅在后台运行脚本并重定向exec相比,这是一种糟糕的方法('php script.php>/dev/null&');标题(“位置:www.google.com”);
您可以在发送请求后使用Ajax提交并在JavaScript中重定向。Ajax是异步的,因此它不必在等待请求时停止reply@TimMorton我会的,但脚本大约有1600行未注释的代码,我没有写,我没有2-3天的时间重写它,这样就可以通过ajax完成(相信我,我更愿意)这个概念相当简单——添加一个onsubmit侦听器来拦截表单提交、执行post和重定向。您不必重写任何内容,只需添加一个观察者:$(function(){$('#my form')。on(“submit”,function(e){e.preventDefault();//执行ajax并重新提交
这仍然不起作用,因为它会产生相同的结果