• 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         }             
  • 相关阅读:
    openldap---ldapsearch使用
    自旋锁与相互排斥锁之抉择
    探索Android中的Parcel机制(上)
    我的Android开发相关文章
    SoftReference
    Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012
    机器学习中规则化和模型选择知识
    Java中System的详细用法
    Java中System的详细用法
    Java中System的详细用法
  • 原文地址:https://www.cnblogs.com/sallybin/p/4447815.html
Copyright © 2020-2023  润新知