Signatur
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
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;
}
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.