[英]Kill connection with browser before script is through running
我有一个脚本,该脚本接收上载的文本文件,对其进行解析,然后将相当多的行插入数据库中。 此过程大约需要一分钟。
即使我使用的是AJAX,我也不希望用户在填充数据库的过程中花一分钟以上的时间看到“正在加载...”。 实际上,一旦解析成功完成,数据库INSERTS将始终有效,因为在解析过程中所有内容均已验证。
因此,我需要做的就是在解析成功后立即返回一个JSON字符串{success:true,data:{cartons: 1000, batchname:"Batch1"}}
。 我是这样做的,但是浏览器直到连接关闭(脚本正在运行)才解析响应(是否正在通过脚本运行),是否仍然可以让浏览器接受响应(当它进入时),或者让我关闭与浏览器的连接我的PHP脚本继续运行?
我将ExtJS用作处理AJAX的Javascript框架。 有任何想法吗? 这已经让我绞尽脑汁了大约一个星期。
只需指定响应内容的长度即可:
$out = 'Return this';
header("Content-Length: " . strlen($out));
header("Connection: close");
echo $out;
flush();
echo 'But do not return this';
// create some file to show that script continues its execution
file_put_contents('script.is.running', '');
您也可以在后台从命令行运行其他脚本(无需等待它们的完成),或者对其中带有ignore_user_abort
函数的脚本执行http请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.