Signatur
Beschreibung
win32_get_service_env_vars() ist eine Funktion der PHP-Extension win32service und steht ausschließlich unter Windows zur Verfügung. Sie gibt ein assoziatives Array mit allen Umgebungsvariablen zurück, die beim Registrieren oder Konfigurieren des Windows-Dienstes als benutzerdefinierte Variablen hinterlegt wurden.
Diese Funktion ist nützlich, wenn ein PHP-Skript als Windows-Dienst (via win32service) läuft und zur Laufzeit auf dienstspezifische Konfigurationswerte zugreifen muss, ohne diese fest im Code zu hinterlegen oder über globale Systemumgebungsvariablen bereitzustellen. So können beispielsweise Datenbankverbindungsparameter oder Pfadangaben je nach Dienstinstanz individuell gesetzt werden.
Die zurückgegebenen Variablen sind unabhängig von den regulären PHP-Superglobals wie $_ENV oder $_SERVER und stammen direkt aus der Dienstkonfiguration, die z. B. mit win32_create_service() angelegt wurde.
Die Funktion sollte nur innerhalb eines laufenden Windows-Dienstes aufgerufen werden. Außerhalb dieses Kontexts liefert sie möglicherweise ein leeres Array oder verhält sich undefiniert.
Rückgabewert
Beispiele
Umgebungsvariablen eines Windows-Dienstes auslesen
<?php
// Dieses Skript läuft als Windows-Dienst (win32service-Extension erforderlich)
win32_start_service_ctrl_dispatcher('mein_dienst');
// Benutzerdefinierte Dienstumgebungsvariablen abrufen
$envVars = win32_get_service_env_vars();
if (!empty($envVars)) {
foreach ($envVars as $key => $value) {
echo "Umgebungsvariable: {$key} = {$value}" . PHP_EOL;
}
} else {
echo 'Keine benutzerdefinierten Umgebungsvariablen gefunden.' . PHP_EOL;
}
Dienst mit Umgebungsvariablen erstellen und diese auslesen
<?php
// Dienst mit benutzerdefinierten Umgebungsvariablen registrieren
$result = win32_create_service([
'service' => 'mein_dienst',
'display' => 'Mein PHP-Dienst',
'description' => 'Ein Beispiel-PHP-Dienst',
'params' => 'C:\\php\\php.exe C:\\dienste\\mein_dienst.php',
'env_vars' => [
'DB_HOST' => 'localhost',
'DB_NAME' => 'meine_datenbank',
'LOG_LEVEL' => 'debug',
],
]);
if ($result === WIN32_NO_ERROR) {
echo 'Dienst erfolgreich erstellt.' . PHP_EOL;
}
// Später innerhalb des laufenden Dienstes:
$vars = win32_get_service_env_vars();
echo 'Datenbankhost: ' . ($vars['DB_HOST'] ?? 'nicht gesetzt') . PHP_EOL;
echo 'Log-Level: ' . ($vars['LOG_LEVEL'] ?? 'nicht gesetzt') . PHP_EOL;
// Wichtig · Fallstricke
Plattformbeschränkung: Diese Funktion ist ausschließlich unter Windows verfügbar und erfordert die installierte PHP-Extension win32service. Auf anderen Betriebssystemen führt der Aufruf zu einem schwerwiegenden Fehler.
Kontext: Die Funktion sollte nur innerhalb eines aktiven Windows-Dienstes aufgerufen werden. Ein Aufruf außerhalb dieses Kontexts (z. B. in einem normalen Web-Request) liefert in der Regel ein leeres Array und ist nicht sinnvoll.
Sicherheit: Sensible Werte wie Passwörter oder API-Schlüssel, die als Dienstumgebungsvariablen gespeichert werden, sind im Windows-Dienstmanager grundsätzlich für Administratoren einsehbar. Für hochsensible Daten sollten zusätzliche Sicherheitsmaßnahmen (z. B. Windows Credential Manager) in Betracht gezogen werden.