经过长时间的搜索,我终于找到了所有制作 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'
";
}
?>