php后台执行
用PHP做采集程序,前台发送采集命令,后台进行采集。但采集时间较长,不可能让浏览器一直处于等待状态,
所以做成前台发送完采集命令到服务器后,服务器进行后台采集,并与浏览器断开连接,这样用户就不用长时间等待(超时)。
下面是查阅互联网后所做的总结:
1. 要让浏览器与服务器断开Http链接,可以在后台返回信息的http response Header文件中加入相应的信息。
比如:
header("Connection: close");//告诉浏览器,连接关闭了,这样浏览器就不用等待服务器的响应
header("HTTP/1.1 200 OK"); //可以发送200状态码,以这些请求是成功的,要不然可能浏览器会重试,特别是有代理的情况下
2. 要让后台服务器返回关闭链接等信息到浏览器后 接着执行后续代码,我们可以用ob缓存。将返回头信息刷入浏览器。
比如:flush(); //该函数为输出ob缓存内容到浏览器。
完整代码如下:
1 ob_end_clean();#清除之前的缓冲内容,这是必需的,如果之前的缓存不为空的话,里面可能有http头或者其它内容,导致后面的内容不能及时的输出 2 header("Connection: close");//告诉浏览器,连接关闭了,这样浏览器就不用等待服务器的响应 3 header("HTTP/1.1 200 OK"); //可以发送200状态码,以这些请求是成功的,要不然可能浏览器会重试,特别是有代理的情况下 4 ob_start();#开始当前代码缓冲 5 echo "后台已经开始执行,请干点别的事情"; 6 //下面输出http的一些头信息 7 $size=ob_get_length(); 8 header("Content-Length: $size"); 9 ob_end_flush();#输出当前缓冲 10 flush();#输出PHP缓冲 11 //========================================================================== 12 13 //下面的代码就在后台执行了,与浏览器已断开链接 14 ignore_user_abort(true); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行 15 set_time_limit(0); //后台执行无时间限制 16 17 //采集程序 18 for(...){ 19 //相应的采集代码 20 }