PHP创建windows服务并自动运行之

原文地址http://bbs.chinaunix.net/viewthread.php?tid=1062440

在论坛看到好文章,我也是跟作者一样不敢独享,故分享之。

因工作需要,需利用PHP在windows中建创自动运行的服务,调试后不敢独享,放出源代码。
特别注意:PHP.ini文件中路径要使用绝对路径
Config.php


<?PHP
/*
*        功能:利用PHP安装windows自动运行的服务
*        作者:LiangJQ
*        时间:2008年3月7日
*/
//定义服务名称
define("_SERVICENAME", "PHP Service");
//定义服务显示名称
define("_SERVICEINFONAME", "Exsample PHP Service");
//定义php.exe存放路径
define("_PATH", "C:wampphpphp.exe");
//定义所要执行的程序名称
define("_PARAMS", "D:\localhost\Service\win32_service.php");
//定义程序分隔执行时间,单位:秒
define("_SLEEP", 5);
?>

index.php


<?php
/*
*        功能:利用PHP安装windows自动运行的服务
*        作者:LiangJQ
*        时间:2008年3月7日
*/
require_once "Config.php";
//查看服务状态
$svcStatus=win32_query_service_status( _SERVICENAME );
if($svcStatus == 1060){
        echo "服务 [ "._SERVICENAME." ] 未被安装";
}else{
        echo "服务 [ "._SERVICENAME." ] 已经安装";
        echo "&nbsp;服务状态:";
        switch($svcStatus['CurrentState']){
                case 1: echo "未启动"; break;
                case 4: echo "已启动"; break;
                default: break;
        }
}
echo '<ul>
  <li><a href="install_service.php">安装服务</a></li>
  <li><a href="uninstall_service.php">移除服务</a></li>
  <li><a href="start_service.php">开始服务</a></li>
  <li><a href="stop_service.php">停止服务</a></li>
  <li><a href="restart_service.php">重启服务</a></li>
</ul>
<p>';
?>

install_service.php


<?php
/*
*        功能:利用PHP安装windows自动运行的服务
*        作者:LiangJQ
*        时间:2008年3月7日
*/
require_once "Config.php";
//注册服务
$x = win32_create_service(array(
    'service' => _SERVICENAME,
        'display' => _SERVICEINFONAME,
    'path' => _PATH,
    'params' => _PARAMS,
        ));
//启动服务
win32_start_service( _SERVICENAME );
if($x !== true){
        die('服务创建失败!');
}else{
        die('服务创建成功!');
}
?>

restart_service.php


<?php
/*
*        功能:利用PHP安装windows自动运行的服务
*        简介:重启服务
*        作者:LiangJQ
*        时间:2008年3月7日
*/
require_once "Config.php";
//重启服务
$svcStatus=win32_query_service_status( _SERVICENAME );
if($svcStatus == 1060){
        echo "服务 [ "._SERVICENAME." ] 未被安装,请先安装";
}else{
        if($svcStatus['CurrentState'] == 1){
                $s=win32_start_service( _SERVICENAME );
                if($s != 0){
                        echo "服务无法被启动,请重试!";
                }else{
                        echo "服务已启动!";
                }
        }else{
                $s=win32_stop_service( _SERVICENAME );
                if($s != 0){
                        echo "服务正在执行,请重试!";
                }else{
                        $s=win32_start_service( _SERVICENAME );
                        if($s != 0){
                                echo "服务无法被启动,请重试!";
                        }else{
                                echo "服务已启动!";
                        }
                }
        }
}
?>

start_service.php


<?php
/*
*        功能:利用PHP安装windows自动运行的服务
*        简介:启动服务
*        作者:LiangJQ
*        时间:2008年3月7日
*/
require_once "Config.php";
//启动服务
$s=win32_start_service( _SERVICENAME );
if($s != 0){
        //1056
        echo "服务正在运行中!";
}else{
        echo "服务已启动!";
}
?>

stop_service.php


<?php
/*
*        功能:利用PHP安装windows自动运行的服务
*        简介:停止服务
*        作者:LiangJQ
*        时间:2008年3月7日
*/
require_once "Config.php";
//停止服务
$s=win32_stop_service( _SERVICENAME );
if($s != 0){
        //1062
        echo "服务未启动!";
}else{
        echo "服务已停止!";
}
?>

uninstall_service.php


<?php
/*
*        功能:利用PHP安装windows自动运行的服务
*        简介:移除服务
*        作者:LiangJQ
*        时间:2008年3月7日
*/
require_once "Config.php";
//移除服务
$removeService = win32_delete_service( _SERVICENAME );
switch($removeService)
{
        case 1060: die('服务不存在!');break;
        case 1072: die('服务不能被正常移除!');break;
        case 0:die('服务已被成功移除!');break;
        default:die();break;
}
?>

win32_service.php


<?php
/*
*        功能:利用PHP安装windows自动运行的服务
*        简介:自动执行程序
*        作者:LiangJQ
*        时间:2008年3月7日
*/
require_once "Config.php";
//检测服务是否存在
if (!win32_start_service_ctrl_dispatcher( _SERVICENAME )) {
die("没有发现正在运行的 [ "._SERVICENAME." ] 服务");
}
//如果运行中
while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
        //写入文件
        for($i=1;$i<=1;$i++){
                $b_file_path="D:\localhost\test.txt";
                $f=fopen($b_file_path,'a+');
                $msg='Dernier backup  correctement:'.date('y/m/d h:i:s');
                fwrite($f,$msg."rn");
                fclose($f);
                sleep(1);
        }
}
?>


( ! ) Warning: Missing argument 1 for cwppos_show_review(), called in /data/www/enjoyphp/wp-content/themes/flat/content-single.php on line 29 and defined in /data/www/enjoyphp/wp-content/plugins/wp-product-review/includes/legacy.php on line 18
Call Stack
#TimeMemoryFunctionLocation
10.0000354984{main}( ).../index.php:0
20.0001355272require( '/data/www/enjoyphp/wp-blog-header.php' ).../index.php:17
30.349610191520require_once( '/data/www/enjoyphp/wp-includes/template-loader.php' ).../wp-blog-header.php:19
40.351010262664include( '/data/www/enjoyphp/wp-content/themes/flat/single.php' ).../template-loader.php:74
50.442810822504get_template_part( ).../single.php:5
60.442810823024locate_template( ).../general-template.php:167
70.442810823120load_template( ).../template.php:643
80.442910823504require( '/data/www/enjoyphp/wp-content/themes/flat/content-single.php' ).../template.php:686
90.448910808616cwppos_show_review( ).../content-single.php:29

1 评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注