在UI的一次请求中,PHP响应可能要几分钟之久。我想PHP在响应的过程中,返回一些提示给UI,例如一分钟时返回“分析指标1”,两分钟时返回“分析指标2”。
    请教各位大虾要怎么做?

解决方案 »

  1.   

    换成多次请求 类似下面的代码if($_GET['p']=='1'){
     echo '动作1已经处理完';
    }else if($_GET['p']=='2'){
     echo '动作2已经处理完';
    }这样一次请求不会处理比较长的时间 很快就能看到结果
      

  2.   

    echo的值不是要等待完成响应请求才一次性返回给浏览器吗?那UI一次获取到这些数据也没意义了,执行都结束了
      

  3.   

    本帖最后由 xuzuning 于 2013-02-01 11:47:50 编辑
      

  4.   

    echo 数据立即送入浏览器,使用ob_flush 和 flush,参照  http://www.cnblogs.com/zemliu/archive/2012/05/11/2495293.html不过我试验的结果是,跟浏览器有很大关系。
    在firebug的网络面板可以看到数据是分别返回,但chrome的调试器则要等到所有数据都返回才能看到返回的数据。
    如果要让返回的数据实时显示在页面上,比如返回“<p>Line start</p”,则要先让浏览器的缓存满,即缓存满了之后,后面接收的line Start 会马上显示,不管chrome还是firefox。而且不知道JS(前台用EXT框架)能不能实时获取到这些数据。
    所以这种方式可能不太可靠。
      

  5.   

    在同一个请求中返回运行状态数据和结果数据,UI不好处理。
    所以拆分为两个请求:分析请求和获取运行状态请求。
    响应的两个PHP例程通过临时文件交互,分析例程在运行过程中往文件中写状态,获取状态例程则读文件。
    UI先发送分析请求,然后定时发送获取运行状态请求,直到分析例程结束。这样涉及到文件读写同步问题,以及一些异常情况:分析例程意外中断退出,临时文件没有删除或清空,影响下次的运行等
      

  6.   

    也可以通过session在两个请求之间传递进度信息。不过感觉这种信息放在session不太好