经过大量的搜索,我最终找到了所有能够创建一个工作的 Windows 服务和服务器的组件,包括
- 安装和卸载服务
- 启动和停止服务
- 实际运行一个基本的服务器
- 响应 Windows 服务的停止/启动/重启请求
我希望您觉得这有用!我使用 PHP 5.2 和 5.2 的 PECL 库完成了这项工作(当时 PHP 5.3 没有为其编译的 PECL 库)
<?php
$Service = 'MyServiceFinal';
$Display = '我的PHP服务';
$host = '127.0.0.1'; $port = 23; $max = 20; if (!isset($argv[1])){ShowHelp(); exit;}
if ($argv[1] == 'install') {
$x = win32_create_service(array(
'service' => $Service,
'display' => $Service,
'params' => __file__ . ' run',
'path' => 'c:\\php\\php.exe',
));
debug_zval_dump($x);
echo "服务已安装\n\n";
exit;
} else if ($argv[1] == 'uninstall') {
$x = win32_delete_service($Service);
debug_zval_dump($x);
echo "服务已删除\n\n";
exit;
} elseif($argv[1] == "start") {
$x = win32_start_service($Service);
debug_zval_dump($x);
echo "服务已启动\n\n";
exit;
} elseif($argv[1] == "stop") {
$x = win32_stop_service($Service);
debug_zval_dump($x);
echo "服务已停止\n\n";
exit;
} else if ($argv[1] != 'run') {
ShowHelp(); exit();
}
if (!win32_start_service_ctrl_dispatcher($Service)) die("无法连接到服务:$Service");
win32_set_service_status(WIN32_SERVICE_RUNNING);
set_time_limit(0);
ob_implicit_flush();
while (1) {
usleep(500);
switch (win32_get_last_control_message()) {
case WIN32_SERVICE_CONTROL_CONTINUE: break; case WIN32_SERVICE_CONTROL_INTERROGATE: win32_set_service_status(WIN32_NO_ERROR); break; case WIN32_SERVICE_CONTROL_STOP: win32_set_service_status(WIN32_SERVICE_STOPPED); exit; default: win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED); }
}
win32_set_service_status(WIN32_SERVICE_STOPPED);
exit;
function ShowHelp(){
echo "使用方法:
install:\t 安装服务
uninstall:\t 删除服务
start:\t\t 启动Windows服务
stop:\t\t 停止Windows服务
run:\t\t 由CMS调用以运行服务
有关代码编号的信息,请键入“net helpmsg xxxx”
示例:“net helpmsg 1072”
";
}
?>