开发者社区> 航空母舰> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

php自动运行 win32service功能

简介:
+关注继续查看

什么 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. ?>  

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PHP导出MySQL数据字典
2017年11月9日09:30:29 用 PHP mysqli 写的一个类文件, 用来导出MySQL数据字典 导出表信息; 字段信息, 索引信息 可以导出浏览器适用的样式, 也可以导出word文档(默认720px)宽度,字体10px 建议上线前用这个导出一份, 整体过一遍, 防止有些字段, not null, 索引等设置不到位的情况 https://gitee.
1147 0
centos下 Apache、php、mysql默认安装路径
apache: 如果采用RPM包安装,安装路径应在 /etc/httpd目录下 apache配置文件:/etc/httpd/conf/httpd.conf Apache模块路径:/usr/sbin/apachectl web目录:/var/www/html 如果采用源代码安装,一般默认安装在/usr/local/apache2目录下 php: 如果采用RPM包安装,安装路
3114 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
复杂PHP系统性能瓶颈排查及优化
立即下载
PHP与APM_技术内幕和最佳实践
立即下载
PHP安全开发_从白帽角度做安全
立即下载