php的定时自动执行

最近在思考这个问题,如果按平常思路 当人是做cron 这样是最好的方式 但是这也是有限定条件的,我不可能为了定期执行某程序去开一个虚拟机,这样对资源占用太大. 其实让PHP 做这个事情可以说是有点难为他了,定时执行 还是要交给OS来做. 但是有一个思路可以放在这里,欢迎大家指正. config.php cron.php ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行. set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去 $interval=60*30;// 每隔半小时运行 do{ $run = include 'config.php'; if(!$run) die('process abort'); //这里是你要执行的代码 sleep($interval);// 等待5分钟 }while(true); 这样做的好处是通过改变config.php中return 0就可以实现了控制这个cron,以免失控,但是这也是不科学的. PHP 毕竟是网页脚本,一旦执行结束会自动清理内存,这样长时间占用的话 会不会出现什么问题也不好说, 总之我对PHP的内存管理信心还是不足.而且会存在一个问题,FASTCGI也会有timeout闲置,这样很有可能无法保证脚本可以一直执行下去. 通过查阅资料,我发现可以使用php_win32service 来在windows下定时定期的自动执行PHP脚本. Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。》》(百度百科)

  • 简单的说就是可以长时间、自动运行在 Windows 上的PHP程序。 问:这对我来说重要吗?  

  有什么用? 哈哈哈!有了这个,我们就可以做更多的事了。如:定期执行一个PHP任务、自动更新数据....等等。   如何实现? 前提:

  1. 必须有一台Windows服务器 或者Windows PC机
  2. 必须安装得有PHP运行环境
  3. 必须在PHP 的安装目录的\ext\下有这个php_win32service.dll文件
  4. 必须有php.ini文件里面开启 extension=php_win32service.dll 这个选项     $this->name, 'display' => $this->info\_name, 'path' => $this->path, 'params' => $this->params, )) ; /* 启动服务 */ win32\_start\_service ( $this->name ) ; if ( $x !== true ){ die ( '服务创建失败!' ) ; } else { die ( '服务创建成功!' ) ; } } /\** *| 卸载服务 * * @access public * * @return void */ public function uninstall() { /* 移除服务 */ $removeService = win32\_delete\_service( $this->name ) ; switch ($removeService) { case 1060: die ('服务不存在!' ) ; break ; case 1072: die ('服务不能被正常移除! ' ) ; break ; case 0: die ('服务已被成功移除!' ) ; break ; default : die (); break ; } } /\** *| 重启服务 * * @access public * * @return void */ public function restart() { /* 重启服务 */ $svcStatus = win32\_query\_service\_status( $this->name );   if ( $svcStatus == 1060 ) { echo "服务[" . $this->name . "]未被安装,请先安装"; } else { if ( $svcStatus['CurrentState'] == 1 ) { $s = win32\_start\_service($this->name); if ( $s != 0 ){ echo "服务无法被启动,请重试! "; } else { echo "服务已启动! "; } } else { $s = win32\_stop\_service($this->name) ; if ( $s != 0 ) { echo " 服务正在执行,请重试! " ; } else { $s = win32\_start\_service( $this->name ) ; if ( $s != 0 ){ echo "服务无法被启动,请重试! "; } else { echo "服务已启动! "; } } } } } /\** *| 启动服务 * * @access public * * @return void */ public function start() { $s = win32\_start\_service(\_SERVICENAME); if ( $s != 0 ){ echo " 服务正在运行中! " ; } else { echo " 服务已启动! " ; } } /\** *| 停止服务 * * @access public * * @return void */ public function stop() { $s = win32\_stop\_service(_SERVICENAME ); if ( $s != 0 ){ echo " 服务未启动! " ; } else { echo " 服务已停止! " ; } } } ?>