首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

怎么让PHP程序实现后台工作

2013-06-19 
如何让PHP程序实现后台工作set_time_limit(0)例如下面这个程序:for($i0$i10$i++){echo $isleep(1)}

如何让PHP程序实现后台工作
set_time_limit(0);
例如下面这个程序:
for($i=0;$i<10;$i++){
    echo $i;
    sleep(1);
}
我需要它每秒输出一次,而不是10秒完成后再一起输出1到10。

实际情况:
我有一个PHP文件,它一次需要运行两个小时,就是for,foreach,while这种正常的循环。
现在的问题就是页面要运行完了之后才输出结果,这两个小时之内,页面不能关,不能刷新。我都看不到程序的进行情况,比如现在循环到几了,输出了些什么。
所以领导要求,点击运行后,就让它后台工作,页面里需要显示运行情况。
请大家支招,谢谢。


[解决办法]
不允许缓存就能实时输出了,但要注意一点:
flush() 函数不会对服务器或客户端浏览器的缓存模式产生影响。因此,必须同时使用 ob_flush() 和 flush() 函数来刷新输出缓冲。

个别web服务器程序,特别是Win32下的web服务器程序,在发送结果到浏览器之前,仍然会缓存脚本的输出,直到程序结束为止。

有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,这将导致 flush()函数产生的结果不会立即被发送到客户端浏览器。

甚至浏览器也会在显示之前,缓存接收到的内容。例如 Netscape 浏览器会在接受到换行或 html 标记的开头之前缓存内容,并且在接受到 </table> 标记之前,不会显示出整个表格。


将以下代码在Apache上运行,能看到1S输出一行,但在IIS上运行是一次性输出。


<?php
set_time_limit(50);
for($i=0;$i<=100;$i++){
    echo $i.'<hr />';
flush();
ob_flush();
sleep(1);
}
?>


[解决办法]
正好下午用到,分享给你win32环境其实一样,意思是浏览器必须达到4096字节才会向浏览器刷新输出缓存,所以需要填充4096空值

在php.ini 
--------
output_buffering = 4096
------

程序里:
echo str_pad('',4096);
ob_flush();
flush();

热点排行