Start · Sprachen · PHP · Referenz · zend_thread_id

zend_thread_id

Funktion

Gibt eine eindeutige numerische ID für den aktuellen PHP-Thread zurück (nur in Thread-Safe-Builds verfügbar).

seit PHP 5.0.0 Kategorie: misc

Signatur

zend_thread_id(): int

Beschreibung

zend_thread_id() liefert eine ganzzahlige, eindeutige Kennung für den Thread, in dem das aktuelle PHP-Skript ausgeführt wird. Diese Funktion ist ausschließlich in PHP-Builds verfügbar, die mit aktiviertem Thread-Safety (ZTS – Zend Thread Safety) kompiliert wurden, also typischerweise beim Einsatz von PHP als Apache-Modul mit mpm_worker oder unter Windows-IIS.

In nicht-thread-sicheren PHP-Builds (NTS, z. B. PHP-FPM oder CLI) ist die Funktion nicht verfügbar. Ein Aufruf führt dort zu einem fatalen Fehler. Die zurückgegebene ID entspricht der betriebssysteminternen Thread-ID und kann zum Debugging, Logging oder zur Identifikation paralleler Ausführungskontexte verwendet werden.

Typische Anwendungsfälle sind die Diagnose von Nebenläufigkeitsproblemen oder das Protokollieren, welcher Thread eine bestimmte Anfrage verarbeitet. Für Produktionsanwendungen ist die Funktion selten relevant; sie ist primär ein Werkzeug für Entwickler und Systemadministratoren.

Rückgabewert

Typ
int
Beschreibung
Gibt die eindeutige numerische Thread-ID des aktuellen Threads zurück. Der genaue Wertebereich ist plattformabhängig.

Beispiele

Thread-ID im Log ausgeben

<?php
if (function_exists('zend_thread_id')) {
    $threadId = zend_thread_id();
    echo "Aktuelle Thread-ID: " . $threadId . PHP_EOL;
} else {
    echo "zend_thread_id() ist in diesem PHP-Build nicht verfügbar (NTS-Build)." . PHP_EOL;
}
Aktuelle Thread-ID: 140234567890432

Thread-ID in Logdatei schreiben

<?php
function logWithThread(string $message): void {
    if (function_exists('zend_thread_id')) {
        $threadId = zend_thread_id();
        $logLine = sprintf("[%s] [Thread:%d] %s", date('Y-m-d H:i:s'), $threadId, $message);
    } else {
        $logLine = sprintf("[%s] [NTS] %s", date('Y-m-d H:i:s'), $message);
    }
    file_put_contents('/var/log/myapp.log', $logLine . PHP_EOL, FILE_APPEND);
}

logWithThread('Anfrage gestartet.');
logWithThread('Anfrage beendet.');

// Wichtig · Fallstricke

Verfügbarkeit: Die Funktion existiert nur in Thread-sicheren PHP-Builds (ZTS). Vor dem Aufruf sollte stets function_exists('zend_thread_id') geprüft werden, um einen fatalen Fehler in NTS-Umgebungen zu vermeiden.

Plattformabhängigkeit: Der zurückgegebene Wert ist vom Betriebssystem abhängig und kann zwischen Anfragen variieren. Unter Windows entspricht er der Windows-Thread-ID, unter Linux der POSIX-Thread-ID (pthread). Der Wert ist nicht garantiert eindeutig über die gesamte Laufzeit des Prozesses hinweg, da Threads nach Beendigung neue Anfragen mit derselben ID bearbeiten können.

Kein Ersatz für Prozess-ID: Für die Prozess-ID steht getmypid() zur Verfügung, das in allen PHP-Umgebungen funktioniert.