PHP - Wissenswertes

In dieser Kategorie sammeln sich einige Beispiele und Erläuterungen über die Programmierung in PHP


Ein PHP-Script als Windows-Dienst starten

Hier will ich kurz beschreiben, wie mit PHP ein Windows-Service eingerichtet werden kann.

Ein Dienst im Bereich PHP ist sinnvoll, da PHP als reine Skript-Ausführung kein Betriebssystemkommando für einen geplanten Shutdown erhält!

 


Ein Dienst löst also dieses Problem, denn wenn ein Betriebssystem herunterfährt, gibt es seinen Diensten die Möglichkeit, sich selbst innerhalb einiger Sekunden zu beenden. Dazu muß das PHP-Script natürlich ab und zu in einen definierten Zustand gelangen, wo es „aussteigen“ kann.

Vielleicht sieht man es besser am Code:

while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
// hier kommt der Code, der ausgeführt werden soll
}

Es gibt also eine Funktion win32_get_last_control_message(), die dem Script sagt, ob es sich beenden soll oder nicht. Damit diese Funktion (und einige weitere) zur Verfügung stehen, benötigt man die extention win32service aus der PECL.

Aber wie installiere ich nun dieses PHP-Script als Dienst? Dazu gibt es auch eine Funktion. Hier der Grundaufbau eines jeden Services:

if ($argv[1] == 'install') {
$x = win32_create_service(array(
'service' => 'My_first_PHP_Service',
'display' => 'My PHP Service',
'params' => __FILE__ . ' run',
));
debug_zval_dump($x);
exit;
} else if ($argv[1] == 'uninstall') {
$x = win32_delete_service('My_first_PHP_Service');
debug_zval_dump($x);
exit;
} else if ($argv[1] != 'run') {
die("bogus args, please use install/uninstall/run");
}
$x = win32_start_service_ctrl_dispatcher('My_first_PHP_Service');
while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
// here comes the code which will be executed
// it should not last longer than 30sec if possible
$someCode = new SomeCode();
$someCode->start();
usleep(500000);
}

Wir haben oben erstmal einige Zeilen, um den Dienst installieren und deinstallieren zu können. Das geht sehr einfach, man benötigt nur einen eindeutigen internen Dienstnamen (hier My_first_PHP_Service) und im Installationsfall eine Zeichenkette, die dann später angezeigt wird.

Aufgerufen mit dem Parameter „install“ wird der Dienst also installiert:

http://www.phpgangsta.de/ein-php-script-als-windows-dienst-starten