免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 14575 | 回复: 15
打印 上一主题 下一主题

[原创]PHP创建windows服务并自动运行之 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-07 22:47 |只看该作者 |倒序浏览
因工作需要,需利用PHP在windows中建创自动运行的服务,调试后不敢独享,放出源代码。


特别注意:PHP.ini文件中路径要使用绝对路径


Config.php

  1. <?PHP
  2. /*
  3. *        功能:利用PHP安装windows自动运行的服务
  4. *        作者:LiangJQ
  5. *        时间:2008年3月7日
  6. */

  7. //定义服务名称
  8. define("_SERVICENAME", "PHP Service");


  9. //定义服务显示名称
  10. define("_SERVICEINFONAME", "Exsample PHP Service");


  11. //定义php.exe存放路径
  12. define("_PATH", "C:\wamp\php\php.exe");


  13. //定义所要执行的程序名称
  14. define("_PARAMS", "D:\\localhost\\Service\\win32_service.php");


  15. //定义程序分隔执行时间,单位:秒
  16. define("_SLEEP", 5);

  17. ?>
复制代码


index.php

  1. <?php
  2. /*
  3. *        功能:利用PHP安装windows自动运行的服务
  4. *        作者:LiangJQ
  5. *        时间:2008年3月7日
  6. */

  7. require_once "Config.php";

  8. //查看服务状态
  9. $svcStatus=win32_query_service_status( _SERVICENAME );
  10. if($svcStatus == 1060){
  11.         echo "服务 [ "._SERVICENAME." ] 未被安装";
  12. }else{
  13.         echo "服务 [ "._SERVICENAME." ] 已经安装";
  14.        
  15.         echo "&nbsp;服务状态:";
  16.         switch($svcStatus['CurrentState']){
  17.                 case 1: echo "未启动"; break;
  18.                 case 4: echo "已启动"; break;
  19.                 default: break;
  20.         }
  21.        
  22. }

  23. echo '<ul>
  24.   <li><a href="install_service.php">安装服务</a></li>
  25.   <li><a href="uninstall_service.php">移除服务</a></li>
  26.   <li><a href="start_service.php">开始服务</a></li>
  27.   <li><a href="stop_service.php">停止服务</a></li>
  28.   <li><a href="restart_service.php">重启服务</a></li>
  29. </ul>
  30. <p>';
  31. ?>
复制代码


install_service.php

  1. <?php
  2. /*
  3. *        功能:利用PHP安装windows自动运行的服务
  4. *        作者:LiangJQ
  5. *        时间:2008年3月7日
  6. */

  7. require_once "Config.php";

  8. //注册服务
  9. $x = win32_create_service(array(
  10.     'service' => _SERVICENAME,
  11.         'display' => _SERVICEINFONAME,
  12.     'path' => _PATH,
  13.     'params' => _PARAMS,
  14.         ));


  15. //启动服务
  16. win32_start_service( _SERVICENAME );


  17. if($x !== true){
  18.         die('服务创建失败!');
  19. }else{
  20.         die('服务创建成功!');
  21. }

  22. ?>
复制代码


restart_service.php

  1. <?php
  2. /*
  3. *        功能:利用PHP安装windows自动运行的服务
  4. *        简介:重启服务
  5. *        作者:LiangJQ
  6. *        时间:2008年3月7日
  7. */

  8. require_once "Config.php";

  9. //重启服务
  10. $svcStatus=win32_query_service_status( _SERVICENAME );
  11. if($svcStatus == 1060){

  12.         echo "服务 [ "._SERVICENAME." ] 未被安装,请先安装";
  13.        
  14. }else{

  15.         if($svcStatus['CurrentState'] == 1){
  16.        
  17.                 $s=win32_start_service( _SERVICENAME );
  18.                
  19.                 if($s != 0){
  20.                         echo "服务无法被启动,请重试!";
  21.                 }else{
  22.                         echo "服务已启动!";
  23.                 }
  24.                
  25.         }else{
  26.        
  27.                 $s=win32_stop_service( _SERVICENAME );

  28.                 if($s != 0){
  29.                         echo "服务正在执行,请重试!";
  30.                 }else{
  31.                
  32.                         $s=win32_start_service( _SERVICENAME );
  33.                
  34.                         if($s != 0){
  35.                                 echo "服务无法被启动,请重试!";
  36.                         }else{
  37.                                 echo "服务已启动!";
  38.                         }
  39.                        
  40.                 }
  41.                
  42.         }

  43. }

  44. ?>
复制代码


start_service.php

  1. <?php
  2. /*
  3. *        功能:利用PHP安装windows自动运行的服务
  4. *        简介:启动服务
  5. *        作者:LiangJQ
  6. *        时间:2008年3月7日
  7. */

  8. require_once "Config.php";

  9. //启动服务
  10. $s=win32_start_service( _SERVICENAME );

  11. if($s != 0){
  12.         //1056
  13.         echo "服务正在运行中!";
  14. }else{
  15.         echo "服务已启动!";
  16. }
  17. ?>
复制代码


stop_service.php

  1. <?php
  2. /*
  3. *        功能:利用PHP安装windows自动运行的服务
  4. *        简介:停止服务
  5. *        作者:LiangJQ
  6. *        时间:2008年3月7日
  7. */

  8. require_once "Config.php";

  9. //停止服务
  10. $s=win32_stop_service( _SERVICENAME );

  11. if($s != 0){
  12.         //1062
  13.         echo "服务未启动!";
  14. }else{
  15.         echo "服务已停止!";
  16. }
  17. ?>
复制代码


uninstall_service.php

  1. <?php
  2. /*
  3. *        功能:利用PHP安装windows自动运行的服务
  4. *        简介:移除服务
  5. *        作者:LiangJQ
  6. *        时间:2008年3月7日
  7. */

  8. require_once "Config.php";

  9. //移除服务
  10. $removeService = win32_delete_service( _SERVICENAME );

  11. switch($removeService)
  12. {
  13.         case 1060: die('服务不存在!');break;
  14.         case 1072: die('服务不能被正常移除!');break;
  15.         case 0:die('服务已被成功移除!');break;
  16.         default:die();break;
  17. }

  18. ?>
复制代码


win32_service.php

  1. <?php
  2. /*
  3. *        功能:利用PHP安装windows自动运行的服务
  4. *        简介:自动执行程序
  5. *        作者:LiangJQ
  6. *        时间:2008年3月7日
  7. */

  8. require_once "Config.php";

  9. //检测服务是否存在
  10. if (!win32_start_service_ctrl_dispatcher( _SERVICENAME )) {
  11. die("没有发现正在运行的 [ "._SERVICENAME." ] 服务");
  12. }


  13. //如果运行中
  14. while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {

  15.         //写入文件
  16.         for($i=1;$i<=1;$i++){
  17.                 $b_file_path="D:\\localhost\\test.txt";
  18.                 $f=fopen($b_file_path,'a+');
  19.                 $msg='Dernier backup  correctement:'.date('y/m/d h:i:s');
  20.                 fwrite($f,$msg."\r\n");
  21.                 fclose($f);
  22.                 sleep(1);
  23.         }

  24. }


  25. ?>
复制代码



相关源码已打包,也可下载测试!

[ 本帖最后由 梦中的天堂 于 2008-3-7 22:52 编辑 ]

Service.rar

3.49 KB, 下载次数: 398

点击这里下载源码

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2008-03-07 23:23 |只看该作者
不错。

简单提示:
Installing from PECL
You can download php_win32service.dll from http://snaps.php.net/win32/. Choose the PECL_X_X folder that matches you PHP version.

Copy the php_win32service.dll into your extension_dir.

Load the extension from your php.ini

extension=php_win32service.dll

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
3 [报告]
发表于 2008-03-07 23:25 |只看该作者

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
4 [报告]
发表于 2008-03-07 23:26 |只看该作者
附加:
*nix下面的以daemon方式运行php
http://www.phpclasses.org/browse/file/8958.html

论坛徽章:
0
5 [报告]
发表于 2008-03-08 12:48 |只看该作者

回复 #1 梦中的天堂 的帖子

谢谢楼主和版主。
真是我所需要的,最近刚好在写这方面的东西,
学习……

[ 本帖最后由 yuxiaqiao 于 2008-3-8 12:49 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-03-18 20:11 |只看该作者
强的,谢谢!我正在找这方面的需要!
JUST TEST

论坛徽章:
0
7 [报告]
发表于 2008-03-20 14:22 |只看该作者
特意注册帐号感谢楼主分享!

论坛徽章:
0
8 [报告]
发表于 2008-03-21 16:08 |只看该作者
写的很好。

之前只用EXEC去执行系统命令实现服务的开始和结束

论坛徽章:
0
9 [报告]
发表于 2008-03-21 18:01 |只看该作者
很好很强大~~

论坛徽章:
0
10 [报告]
发表于 2008-03-21 19:03 |只看该作者
真的很黄很爆力,收藏先!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP