如果字符串有空格,则在“之间插入参数值
<?php
// 首先你需要创建一个服务,你只需要做一次
/*
win32_create_service(array(
'service' => 'myphpservice',
'display' => 'My PHP Service',
'params' => '"c:\\my folder\myphpservice.php"',
'path' => 'c:\\PHP\\php.exe'));
*/
?>
(PECL win32service >=0.1.0)
win32_start_service_ctrl_dispatcher — 将脚本注册到 SCM,使其可以作为具有给定名称的服务运行
当通过服务控制管理器启动时,服务进程需要“注册”到它,以建立服务监控和通信设施。此函数通过生成一个线程来处理与服务控制管理器的底层通信来执行注册。
启动后,服务进程应执行两件事。首先是告诉服务控制管理器服务正在运行。这是通过调用 win32_set_service_status() 并使用 WIN32_SERVICE_RUNNING
常量来实现的。如果你需要在服务实际运行之前执行一些长时间的操作,那么可以使用 WIN32_SERVICE_START_PENDING
常量。其次是继续与服务控制管理器保持注册,以便它可以确定是否应该终止。这是通过定期调用 win32_get_last_control_message() 并适当处理返回值来实现的。
从 0.2.0 版本开始,此函数仅在“cli” SAPI 中工作。在其他 SAPI 中,此函数被禁用。
name
服务的简称,由 win32_create_service() 注册。
gracefulMode
true
用于优雅退出。false
用于退出并报错。有关详细信息,请参阅 win32_set_service_exit_mode()。
在 1.0.0 版本之前,如果 SAPI 不是 "cli"
,则此函数会发出 E_ERROR
级别错误。
从 1.0.0 版本开始,如果 SAPI 不是 "cli"
,则会抛出 Win32ServiceException。
版本 | 描述 |
---|---|
PECL win32service 1.0.0 | 如果参数中的数据无效,则会抛出 ValueError,之前返回的是 false 。 |
PECL win32service 1.0.0 | 如果出错,则会抛出 Win32ServiceException,之前返回的是 Win32 错误代码。 |
PECL win32service 1.0.0 | 返回值类型现在是 void,之前是 mixed。 |
PECL win32service 0.4.0 | 添加了 gracefulMode 参数。 |
PECL win32service 0.2.0 | 此函数仅在 "cli" SAPI 中工作。 |
示例 #1 win32_start_service_ctrl_dispatcher() 示例
检查服务是否在 SCM 下运行。
<?php
if (!win32_start_service_ctrl_dispatcher('dummyphp')) {
die("我可能没有在服务控制管理器下运行");
}
win32_set_service_status(WIN32_SERVICE_START_PENDING);
// 一些长时间的进程来启动和运行此服务。
win32_set_service_status(WIN32_SERVICE_RUNNING);
while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
# 在这里做一些工作,尽量不要超过大约 30 秒
# 然后再回到循环中
}
?>
如果字符串有空格,则在“之间插入参数值
<?php
// 首先你需要创建一个服务,你只需要做一次
/*
win32_create_service(array(
'service' => 'myphpservice',
'display' => 'My PHP Service',
'params' => '"c:\\my folder\myphpservice.php"',
'path' => 'c:\\PHP\\php.exe'));
*/
?>
<?php
// 首先你需要创建一个服务,你只需要做一次
/*
win32_create_service(array(
'service' => 'myphpservice',
'display' => 'My PHP Service',
'params' => 'c:\\myphpservice.php',
'path' => 'c:\\PHP\\php.exe'));
*/
$myservicename = 'myphpservice';
// 连接到服务调度程序并通知启动成功
if (!win32_start_service_ctrl_dispatcher($myservicename)) die('无法连接到服务:'.$myservicename);
win32_set_service_status(WIN32_SERVICE_RUNNING);
// 主服务器循环
while (1) {
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); // 添加更多案例来处理其他服务调用
}
// 主脚本在这里
sleep(10); // 每 10 秒运行一次
}
win32_set_service_status(WIN32_SERVICE_STOPPED);
?>