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         }             

 

posted @ 2015-04-22 16:13  SallyBin  阅读(1449)  评论(0编辑  收藏  举报