An example of how it should be done:
<?php
class TestClass {
private $args;
function __construct($arg) {
$this->args = $arg;
$this->run();
}
private function run() {
if ($this->args == 'run') {
win32_start_service_ctrl_dispatcher('test_service');
while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
# do your work here.
# try not to take up more than 30 seconds before going around the loop
# again
}
}
}
}
$object = new TestClass($argv[1]);
?>
CLXXIII. win32service Functions
Einführung
The win32service extension is a Windows specific extension that allows PHP to communicate with the Service Control Manager to start, stop, register and unregister services, and even allows your PHP scripts to run as a service.
Anforderungen
Windows NT, Windows 2000, Windows XP or Windows Server 2003. Any version of windows derived from Windows NT should be compatible.
Installation
Prozedur 17. Installing from PECL
You can download php_win32service.dll from http://snaps.php.net/win32/. Choose the PECL_X_X folder that matches you PHP version.
Copy the php_win32service.dll into your extension_dir.
Load the extension from your php.ini
extension=php_win32service.dll
Beispiele
Beispiel 2226. Registering a PHP script to run as a service
<?php |
Beispiel 2228. Running as a service
<?php |
Vordefinierte Konstanten
Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.
- WIN32_SERVICE_CONTROL_CONTINUE (integer)
- WIN32_SERVICE_CONTROL_INTERROGATE (integer)
- WIN32_SERVICE_CONTROL_PAUSE (integer)
- WIN32_SERVICE_CONTROL_STOP (integer)
- WIN32_SERVICE_CONTROL_HARDWAREPROFILECHANGE (integer)
- WIN32_SERVICE_CONTROL_POWEREVENT (integer)
- WIN32_SERVICE_CONTROL_SESSIONCHANGE (integer)
- WIN32_ERROR_CALL_NOT_IMPLEMENTED (integer)
- WIN32_NO_ERROR (integer)
- WIN32_SERVICE_RUNNING (integer)
- WIN32_SERVICE_STOPPED (integer)
- WIN32_SERVICE_STOP_PENDING (integer)
- WIN32_SERVICE_WIN32_OWN_PROCESS (integer)
- WIN32_SERVICE_INTERACTIVE_PROCESS (integer)
- WIN32_SERVICE_STOPPED (integer)
- WIN32_SERVICE_START_PENDING (integer)
- WIN32_SERVICE_STOP_PENDING (integer)
- WIN32_SERVICE_RUNNING (integer)
- WIN32_SERVICE_CONTINUE_PENDING (integer)
- WIN32_SERVICE_PAUSE_PENDING (integer)
- WIN32_SERVICE_PAUSED (integer)
- WIN32_SERVICE_ACCEPT_NETBINDCHANGE (integer)
- WIN32_SERVICE_ACCEPT_PARAMCHANGE (integer)
- WIN32_SERVICE_ACCEPT_PAUSE_CONTINUE (integer)
- WIN32_SERVICE_ACCEPT_SHUTDOWN (integer)
- WIN32_SERVICE_ACCEPT_STOP (integer)
- WIN32_SERVICE_ACCEPT_HARDWAREPROFILECHANGE (integer)
- WIN32_SERVICE_ACCEPT_POWEREVENT (integer)
- WIN32_SERVICE_ACCEPT_SESSIONCHANGE (integer)
- WIN32_SERVICE_FILE_SYSTEM_DRIVER (integer)
- WIN32_SERVICE_KERNEL_DRIVER (integer)
- WIN32_SERVICE_WIN32_SHARE_PROCESS (integer)
- WIN32_SERVICE_RUNS_IN_SYSTEM_PROCESS (integer)
Inhaltsverzeichnis
- win32_create_service — Creates a new service entry in the SCM database
- win32_delete_service — Deletes a service entry from the SCM database
- win32_get_last_control_message — Returns the last control message that was sent to this service
- win32_query_service_status — Queries the status of a service
- win32_set_service_status — Update the service status
- win32_start_service_ctrl_dispatcher — Registers the script with the SCM, so that it can act as the service with the given name
- win32_start_service — Starts a service
- win32_stop_service — Stops a service
Just to help a little, the service control command must be in the first script called. If you try to type this portion of code in a separate file and include it, the SCM will not get the controls.
example :
- file1.inc :
<?PHP
class MyClass{
function __construct() {
$x = win32_start_service_ctrl_dispatcher('service');
while (WIN32_SERVICE_CONTROL_STOP!=win32_get_last_control_message()){
//your code
}
}
?>
- service.php :
<?PHP
include("file1.inc");
$object = new MyClass();
?>
WON'T WORK !
