这是我的代码:
<?phpignore_user_abort(); //忽略用户影响
set_time_limit(0); //连续运行
while (1) {
                $now = date("H:i:s");
 $s = explode(":", $now);
 if ($now == '00:00:00') { //每天00:00:00检查
               ......
   } if ($s[0] == '23') {
  if ($s[1] > 49) {
   if ($s[1] == '59') {
     sleep(1); //23:59:00--23:59:59 1秒钟执行一次
    } else {
     sleep(60); //23:50--23:59 1分钟执行一次
    }
  } else {
   sleep(600); //23:00--23:49,10分钟执行一次
  }
 } else {
  sleep(3600); //23点以外,1小时执行一次
 }
}
?>我要的效果是:
执行一次之后,程序不间断的运行,在每天零点检查数据;
现在的情况是执行一次之后,关闭浏览器,程序持续执行,在23点之前,一小时运行一次可以做到,在23:50之前每十分钟执行一次也能做到,23:50--23:59 1分钟执行一次和23:59:00--23:59:59 1秒钟执行一次并最终在00:00:00执行检查数据都是正常的,但这个过程只有24小时,然后就停止了。
例如:我在10:25:18运行了一下程序,然后关掉浏览器,之后在每一个小时的25分18秒程序都会运行一遍,直到23:25:18开始每十分钟执行一次,再到23:55:18开始每一分钟执行一次,最后到23:59:18开始一秒钟执行一次,最终到00:00:00执行if语句检查数据,假如1秒钟检查完毕,那么,到01:00:01再次执行,接下来每隔一小时执行一次,直到09:00:01执行之后,到这里,程序停止了,不再继续运行了,我不知道什么原因,请教高手指点,不胜感激!

解决方案 »

  1.   

    不知道你的系统是什么,如果是linux下的话,好像有个ulimit其中 -t size:设置CPU使用时间的最大上限.单位:seconds不知道是否是受其影响!最好使用shell的方式启动,用web方式还会受到web server的影响!
      

  2.   

    改一下结构,看起来会更好些:
      if ($s[0] == '23') { 
          if ($s[1] > 49) {
              if ($s[1] == '59') {
      sleep(1); //23:59:00--23:59:59 1秒钟执行一次
      } 
          else 
     {
              sleep(60); //23:50--23:59 1分钟执行一次
               }
           }
         else 
       {
           sleep(600); //23:00--23:49,10分钟执行一次
               }
      } 
      else 
      {
      sleep(3600); //23点以外,1小时执行一次 
      }
    整个结构看起来没问题。WIN下我想应该会一直进行这个循环。但是不知道你的;
    if ($now == '00:00:00') { //每天00:00:00检查
      ......
      }
    这6个点里的代码是怎么样的。是否有退出循环类操作?
      

  3.   

    我也遇到这样的问题,而且,始终也没很好的解决
    应该跟服务器(apach)的配置有关,但也不一定
    我做持续采集,测试发现,有的电脑可以持续,不出错。但有的就总是出错,显示是服务器内部什么500错误之类的。
    之后呢,解决方法,就是不用php的sleep函数,用js。js每隔一段时间查询下。如果需要连到数据库,就用ajax。如果程序需要本页执行。就查询发下需要执行(比如到时间)时候。从新调用本页(location.replace)。
    经测试,可用。
    但并发打开页面多了也会出错,而出错页面多了,对导致内存不够。又导致js也不行。所以基本每天要检查下