我在server上有一个php脚本需要长时间运行,(大概要1个小时)。
已经设置了set_time_limit(0)就比方说
<?php
set_time_limit(0);
while(1) {
  // do nothing
}
?>
但无论在windows上用IE访问,还是在linux上用firefox访问,过不了几分钟就弹出页面
 
 网络访问消息:: 不能显示此页  
 
 解释: 在页面检索完成之前,请求超时。尝试下列: 
刷新页:单击“刷新”按钮来再次搜索此页。这可能是一个一次性错误。 
如果您仍然看不到请求的页面,请与您的管理员或支持人员联系。  
 
 技术信息(提供给支持人员) 
错误代码 1460: 超时 
背景信息: 网关不能从您要访问的网站、DNS 服务器或另一个网关服务器接收到及时响应。这可能表明网拥塞,或者该网站遇到技术困难。 
日期: 2010-10-10 6:42:17 
服务器: srv-isa.actions.com.cn 
源: 防火墙  然后后台的php脚本就停止了
请问该怎么办才能让php脚本一直跑下去呢?

解决方案 »

  1.   

    不要寄希望于PHP能帮你完成。换其他语言吧。
      

  2.   

    <?php
    set_time_limit(0);
    while(1) {
      // do nothing
      sleep(1);
    }
    ?>每做完一个循环暂停一下,否则分配的资源会被占尽,就宕了
      

  3.   

    在什么上使用?   本地么#2的就可以  如果是空间  就不行  空间会把把超时的脚本杀掉如果想让PHP一直运行下去也是可以的   不过要受到服务器的限制提供一个方法给你 用set_time_limit(0); 暂时不让脚本过期
    执行到临界时间(服务器超时)前模拟http请求再次调用这个脚本  提供响应参数让起继续执行。
      

  4.   

    弱弱问一句,模拟http请求再次调用这个脚本?那岂不是要从头再跑,那上次已经运行过的怎么办?
      

  5.   

    出现你的这种情况的原因是 web 服务器超时了1、你可以在命令行方式下运行你的代码
    2、修改你的程序,在循环中要有输出,那怕是 echo ' ';
      

  6.   

    这个很好办啊,我上面有说,把此次运行的一下数据记录下来,在下次调用的时候通过GET或者POST方式传给这个脚本,然后执行之前对这些参数进行分析,以确定从哪里继续执行。再加上 ignore_user_abort(); 这个函数,可以让脚本在关闭浏览器的时候依然执行下去(守护进程)。当然,服务器如果重启什么的,就没用了 :)
      

  7.   

    参考下这个ob_start();
    ob_end_flush();
    for($i = 1; $i <= 300; $i++ )echo ' ';$i = 0;
    while(1) {
    echo $i;
    sleep(1);
    flush();
    $i++;
    }
      

  8.   

    再补充一下唠叨老大的说法,如果一个长时间执行的脚本,在它运行的时间内一直没有输出的话,服务器可能就认定它超时给杀掉了。所以你需要在进本运行的时候echo点什么东西。  然后这里还有个兼容性的问题是,IE浏览器只有在获取到超过1024(好像是,具体忘了)个字符后才会输出东西,其他浏览器则不会,你可以做一个小的循环输出1-100试一下。如果你输出的东西比较短  建议用缓冲区。
      

  9.   

    ignore_user_abort或者 linux 上面 用 crontab或者 终端下面用执行