如果字串有空格,請在 "" 之間插入參數值
<?php
// 首先您需要創建一個服務,您只需要執行一次
/*
win32_create_service(array(
'service' => 'myphpservice',
'display' => '我的 PHP 服務',
'params' => '"c:\\my folder\myphpservice.php"',
'path' => 'c:\\PHP\\php.exe'));
*/
?>
(PECL win32service >=0.1.0)
win32_start_service_ctrl_dispatcher — 將腳本註冊到 SCM,使其可以作為指定名稱的服務運作
當透過服務控制管理員 (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("I'm probably not running under the service control manager");
}
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' => '我的 PHP 服務',
'params' => '"c:\\my folder\myphpservice.php"',
'path' => 'c:\\PHP\\php.exe'));
*/
?>
<?php
// 首先您需要建立一個服務,只需要執行一次
/*
win32_create_service(array(
'service' => 'myphpservice',
'display' => '我的 PHP 服務',
'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);
?>