php自动运行 win32service功能

本文介绍如何使用PHP在Windows上创建可自动运行的服务,包括服务的安装、启动、停止及卸载等操作,并提供了详细的代码示例。

什么 windows服务  ? http://hudeyong926.iteye.com/blog/1056467

Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序 。 这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算 机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务

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

 

有什么用?

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

 

如何实现?

必须有一台 Windows服务器 或者Windows PC机

必须安装得有PHP运行环境

必须在PHP 的安装目录的\ext\下有这个 php_win32service.dll文件

必须有php.ini文件里面开启  extension=php_win32service.dll 这个选项

如果你运行不起来(请看一哈上面的说明哦)最重要代码来了,如下

Java代码   收藏代码
  1. <?php  
  2. /** 
  3.  * 利用PHP安装windows自动运行的服务 
  4.  * $Id: WinService.class.php 
  5.  * $winService = new WinService(); 
  6.  * $winService->install(); 
  7.  */  
  8. class WinService  
  9. {  
  10.     //服务名称  
  11.     var $name = 'PHP Service';  
  12.     //定义服务名称  
  13.     var $info_name = "Exsample PHP Service";  
  14.     //定义php.exe存放路径  
  15.     var $path = "C:\\wamp\\php\\php.exe";  
  16.     //定义所要执行的程序  
  17.     var $params = "D:\\localhost\\Service\\win32_service.php";  
  18.     //定义程序分隔执行时间,单位:秒  
  19.     var $sleep = 5;  
  20.   
  21.     private function __construct($name = '', $infoName = '', $param = '')  
  22.     {  
  23.         $this->name = $name;  
  24.         $this->info_name = $infoName;  
  25.         $this->params = $param;  
  26.     }  
  27.   
  28.     public function install()  
  29.     {  
  30.         /* 注册服务  */  
  31.         $x = win32_create_service(array(  
  32.             'service' => $this->name,  
  33.             'display' => $this->info_name,  
  34.             'path' => $this->path,  
  35.             'params' => $this->params,  
  36.         ));  
  37.   
  38.         /* 启动服务 */  
  39.         win32_start_service($this->name);  
  40.   
  41.         if ($x !== true) {  
  42.             die ('服务创建失败!');  
  43.         } else {  
  44.             die ('服务创建成功!');  
  45.         }  
  46.     }  
  47.   
  48.     public function uninstall()  
  49.     {  
  50.         /* 移除服务 */  
  51.         $removeService = win32_delete_service($this->name);  
  52.   
  53.         switch ($removeService) {  
  54.             case   1060:  
  55.                 die ('服务不存在!');  
  56.                 break;  
  57.             case   1072:  
  58.                 die ('服务不能被正常移除! ');  
  59.                 break;  
  60.             case      0:  
  61.                 die ('服务已被成功移除!');  
  62.                 break;  
  63.             default    :  
  64.                 die ();  
  65.                 break;  
  66.         }  
  67.     }  
  68.   
  69.     public function restart()  
  70.     {  
  71.         /* 重启服务 */  
  72.         $svcStatus = win32_query_service_status($this->name);  
  73.   
  74.         if ($svcStatus == 1060) {  
  75.             echo   "服务[" . $this->name . "]未被安装,请先安装";  
  76.         } else {  
  77.             if ($svcStatus['CurrentState'] == 1) {  
  78.                 $s = win32_start_service($this->name);  
  79.   
  80.                 if ($s != 0) {  
  81.                     echo  "服务无法被启动,请重试! ";  
  82.                 } else {  
  83.                     echo  "服务已启动! ";  
  84.                 }  
  85.   
  86.             } else {  
  87.                 $s = win32_stop_service($this->name);  
  88.                 if ($s != 0) {  
  89.                     echo " 服务正在执行,请重试! ";  
  90.                 } else {  
  91.                     $s = win32_start_service($this->name);  
  92.                     if ($s != 0) {  
  93.                         echo   "服务无法被启动,请重试! ";  
  94.                     } else {  
  95.                         echo   "服务已启动! ";  
  96.                     }  
  97.                 }  
  98.             }  
  99.         }  
  100.     }  
  101.   
  102.     public function start()  
  103.     {  
  104.         $s = win32_start_service($this->name);  
  105.         if ($s != 0) {  
  106.             echo   " 服务正在运行中! ";  
  107.         } else {  
  108.             echo   " 服务已启动! ";  
  109.         }  
  110.     }  
  111.   
  112.     public function stop()  
  113.     {  
  114.         $s = win32_stop_service($this->name);  
  115.         if ($s != 0) {  
  116.             echo   " 服务未启动! ";  
  117.         } else {  
  118.             echo   " 服务已停止! ";  
  119.         }  
  120.     }  
  121. }  
  122.   
  123. ?>  

win32_service.php

Java代码   收藏代码
  1. <?php  
  2. //检测服务是否存在  
  3. if (!win32_start_service_ctrl_dispatcher("PHP Service")) {  
  4.  die("没有发现正在运行的 [ "PHP Service" ] 服务");  
  5. }  
  6. win32_set_service_status(WIN32_SERVICE_START_PENDING);  
  7. win32_set_service_status(WIN32_SERVICE_RUNNING);  
  8. //如果运行中  
  9. while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {  
  10.     //写入文件  
  11.     for ($i = 1; $i <= 1; $i++) {  
  12.         $b_file_path = "D:\\localhost\\test.txt";  
  13.         $f = fopen($b_file_path, 'a+');  
  14.         $msg = 'Dernier backup  correctement:' . date('y/m/d h:i:s');  
  15.         fwrite($f, $msg . "\r\n");  
  16.         fclose($f);  
  17.         sleep(1);  
  18.     }  
  19. }  
  20. ?>  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值