Start · Sprachen · PHP · Referenz · win32_get_service_env_vars

win32_get_service_env_vars

Funktion

Liest alle benutzerdefinierten Umgebungsvariablen aus, die für den aktuell laufenden Windows-Dienst definiert wurden.

seit PHP 1.0.0 Kategorie: misc

Signatur

win32_get_service_env_vars(): array

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

Typ
array
Beschreibung
Gibt ein assoziatives Array zurück, bei dem die Schlüssel die Namen der Umgebungsvariablen und die Werte die entsprechenden Zeichenketten sind. Wurden keine benutzerdefinierten Umgebungsvariablen für den Dienst definiert, wird ein leeres Array zurückgegeben.

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;
}
Umgebungsvariable: DB_HOST = localhost Umgebungsvariable: DB_NAME = meine_datenbank

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;
Dienst erfolgreich erstellt. Datenbankhost: localhost Log-Level: debug

// 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.