如果字符串中有空格,请在“之间插入参数值
<?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_SERVICE_RUNNING
常量调用win32_set_service_status()来实现的。如果您需要在服务实际运行之前执行一些冗长的过程,则可以使用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);
?>