Signatur
Beschreibung
opcache_jit_blacklist() fügt eine bestimmte PHP-Funktion zur JIT-Blacklist hinzu, sodass der OPcache-JIT-Compiler diese Funktion nicht mehr in nativen Maschinencode übersetzt. Die Funktion wird ab dem nächsten Aufruf ausschließlich über den regulären Interpreter oder den OPcache-Bytecode ausgeführt.
Diese Funktion ist besonders nützlich, wenn eine bestimmte Funktion durch die JIT-Kompilierung unerwartetes Verhalten zeigt – etwa falsche Berechnungsergebnisse, Abstürze oder Inkompatibilitäten mit Erweiterungen. In solchen Fällen ermöglicht die Blacklistierung eine gezielte Fehlerbehebung, ohne JIT für die gesamte Anwendung zu deaktivieren.
Um die Funktion nutzen zu können, muss die OPcache-Erweiterung geladen (opcache.enable=1) und JIT aktiv sein (opcache.jit auf einen Wert wie tracing oder function gesetzt). Die Blacklist gilt nur für den aktuellen Prozess und wird nicht persistent zwischen Requests gespeichert.
Hinweis: Diese Funktion steht nur dann zur Verfügung, wenn PHP mit aktiviertem OPcache und JIT-Unterstützung kompiliert wurde. Sie ist primär ein Debugging- und Diagnose-Werkzeug für Entwickler und sollte nicht im regulären Produktionsbetrieb eingesetzt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $function_name Pflicht | string | Der vollständige Name der PHP-Funktion (ggf. inkl. Namespace), die von der JIT-Kompilierung ausgeschlossen werden soll. Bei Methoden in Klassen ist der vollständige Name in der Form ClassName::methodName anzugeben. |
Rückgabewert
true zurück, wenn die Funktion erfolgreich zur JIT-Blacklist hinzugefügt wurde. Gibt false zurück, wenn OPcache nicht geladen ist, JIT nicht aktiv ist oder die angegebene Funktion nicht gefunden werden konnte.Beispiele
Einzelne Funktion von JIT ausschließen
<?php
// Schließt die benutzerdefinierte Funktion 'berechne_komplex' von JIT aus
if (function_exists('opcache_jit_blacklist')) {
$result = opcache_jit_blacklist('berechne_komplex');
if ($result) {
echo "Funktion erfolgreich zur JIT-Blacklist hinzugefügt.\n";
} else {
echo "Blacklistierung fehlgeschlagen (JIT inaktiv oder Funktion nicht gefunden).\n";
}
} else {
echo "opcache_jit_blacklist ist nicht verfügbar.\n";
}
function berechne_komplex(float $x): float {
return sqrt($x) * log($x + 1);
}
echo berechne_komplex(42.0) . "\n";
Methode einer Klasse von JIT ausschließen
<?php
// Schließt eine Klassenmethode von der JIT-Kompilierung aus
class Simulator {
public function run(int $iterations): float {
$sum = 0.0;
for ($i = 1; $i <= $iterations; $i++) {
$sum += 1.0 / $i;
}
return $sum;
}
}
if (function_exists('opcache_jit_blacklist')) {
$blacklisted = opcache_jit_blacklist('Simulator::run');
echo $blacklisted
? "Methode Simulator::run ist jetzt von JIT ausgeschlossen.\n"
: "Blacklistierung nicht möglich.\n";
}
$sim = new Simulator();
echo number_format($sim->run(1000), 6) . "\n";
// Wichtig · Fallstricke
Verfügbarkeit: Die Funktion ist nur verfügbar, wenn PHP mit der OPcache-Erweiterung kompiliert und JIT aktiviert ist (opcache.jit in der php.ini konfiguriert). Ohne aktiven JIT gibt die Funktion false zurück oder ist nicht definiert.
Gültigkeit: Die Blacklist ist nur für den aktuellen PHP-Prozess gültig und wird nicht zwischen verschiedenen Requests oder Worker-Prozessen geteilt. Bei einem Neustart des Webservers oder FPM-Pools wird die Blacklist zurückgesetzt.
Einsatzzweck: Diese Funktion ist ausdrücklich als Diagnose- und Debugging-Werkzeug gedacht. Wenn eine Funktion dauerhaft von JIT ausgeschlossen werden soll, empfiehlt sich stattdessen die Konfiguration über opcache.jit_blacklist_root_trace oder das Deaktivieren von JIT in der php.ini.