ChinaUnix首页 > 精华文章 > Php > 正文

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


http://www.chinaunix.net 作者:梦中的天堂  发表于:2008-03-28 16:58:09
发表评论】 【查看原文】 【Php讨论区】【关闭

因工作需要,需利用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:\wamp\php\php.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."\r\n");
fclose($f);
sleep(1);
}

}


?>



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

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

Service.rar



 HonestQiao 回复于:2008-03-07 23:23:37

不错。

简单提示:
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


 HonestQiao 回复于:2008-03-07 23:25:15

另外:
http://netevil.org/blog/2005/sep/running-php-as-a-service-on-win32
http://viewcvs.php.net/viewcvs.cgi/pecl/win32service/sample.php?view=markup&content-type=text%2Fvnd.viewcvs-markup&revision=HEAD


 HonestQiao 回复于:2008-03-07 23:26:18

附加:
*nix下面的以daemon方式运行php
http://www.phpclasses.org/browse/file/8958.html


 yuxiaqiao 回复于:2008-03-08 12:48:45

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

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


 rainstown 回复于:2008-03-18 20:11:13

强的,谢谢!我正在找这方面的需要!
JUST TEST


 teamoustar 回复于:2008-03-20 14:22:24

特意注册帐号感谢楼主分享!


 ct_17880859 回复于:2008-03-21 16:08:49

写的很好。

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


 Bangel 回复于:2008-03-21 18:01:37

很好很强大~~


 goshawk 回复于:2008-03-21 19:03:25

真的很黄很爆力,收藏先!


 fan12 回复于:2008-03-22 15:13:15

都四强人啊!


 ybswya 回复于:2008-03-25 11:51:28

[url=http://itemrate.com]wow gold on sale,professional wow power leveling,we provide [url=http://d-team.blogbus.com]DinmoTeam reviews and guides,check here for reviews to buy world of warcraft gold.


 teamoustar 回复于:2008-03-25 19:48:00

在win2003 IIS 下貌似无法使用。 php版本5.2.3  php_win32service.dll也是下载的对应版本。


 untitled 回复于:2008-03-28 16:58:09

好东西,顶!




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=1062440
转载请注明作者名及原文出处