因工作需要,需利用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 " 服务状态:";
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
好东西,顶!
|