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

 

相关文章
|
3月前
|
编译器 Linux PHP
【Azure App Service】为部署在App Service上的PHP应用开启JIT编译器
【Azure App Service】为部署在App Service上的PHP应用开启JIT编译器
|
4天前
|
JavaScript PHP UED
16 PHP实现图书删除功能
路老师在知乎上分享了PHP语言的知识,帮助大家入门和深入了解PHP。本文介绍了如何实现图书删除功能,通过点击删除按钮触发`deleteBook.php`文件,完成删除操作并返回列表页。同时,还新增了一个“新增”按钮,优化了用户体验。
12 2
16 PHP实现图书删除功能
|
4天前
|
JavaScript PHP
17 PHP 实现批量删除功能
路老师在本文中继续优化图书删除功能,实现批量删除图书。通过添加删除按钮、表格前的复选框以及实现PHP后端逻辑,展示了完整的删除流程和效果。
18 8
|
6天前
|
自然语言处理 编译器 应用服务中间件
PHP在服务器上的运行过程
PHP在服务器上的运行过程
23 7
|
5天前
|
数据库连接 PHP Apache
PHP在Apache中如何运行?
PHP在Apache中如何运行?
13 5
|
4天前
|
数据库连接 PHP
15 PHP实现图书修改功能
路老师分享了如何使用PHP实现图书信息的修改功能。首先,在列表页面点击编辑按钮,跳转至`editBook.php`,通过ID获取图书信息并展示在`edit.html`页面。用户提交修改后,`updateBook.php`处理更新请求,成功后返回到图书列表页。纯干货,技术知识满满。
12 2
|
4天前
|
PHP
14 PHP实现图书添加功能
路老师分享PHP语言知识,帮助大家入门并深入了解PHP。本文介绍如何实现图书添加功能,包括创建HTML表单和PHP后端处理逻辑,最后展示实际效果。
11 2
|
2月前
|
域名解析 关系型数据库 MySQL
基于PHPEnv的本地环境搭建—PHP第一个项目:HelloWorld(从安装到运行)
该文章指导如何使用PHPEnv搭建本地PHP开发环境,并通过一个简单的"Hello World"程序演示从安装到运行的全过程。
基于PHPEnv的本地环境搭建—PHP第一个项目:HelloWorld(从安装到运行)
|
2月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入探索与实践在软件开发的广袤天地中,PHP以其独特的魅力和强大的功能,成为无数开发者手中的得力工具。而在这条充满挑战与机遇的征途上,设计模式犹如一盏明灯,指引着我们穿越代码的迷雾,编写出更加高效、灵活且易于维护的程序。今天,就让我们聚焦于设计模式中的璀璨明珠——策略模式,深入探讨其在PHP中的实现方法及其实际应用价值。
策略模式,这一设计模式的核心在于它为软件设计带来了一种全新的视角和方法。它允许我们在运行时根据不同情况选择最适合的解决方案,从而极大地提高了程序的灵活性和可扩展性。在PHP这门广泛应用的编程语言中,策略模式同样大放异彩,为开发者们提供了丰富的创作空间。本文将从策略模式的基本概念入手,逐步深入到PHP中的实现细节,并通过一个具体的实例来展示其在实际项目中的应用效果。我们还将探讨策略模式的优势以及在实际应用中可能遇到的挑战和解决方案,为PHP开发者提供一份宝贵的参考。
|
2月前
|
PHP
深入浅出PHP之文件上传功能
【9月更文挑战第26天】本文将带你了解PHP中的文件上传功能,从基本概念到实战操作,一步步教你如何实现文件上传。我们将通过代码示例和详细的解释,让你轻松掌握这一技能。