Signatur
Beschreibung
phpdbg_start_oplog() beginnt die interne Protokollierung aller ausgeführten PHP-Opcodes. Diese Funktion steht ausschließlich im PHPDBG-SAPI zur Verfügung und ist primär für tiefgehende Debugging- und Profiling-Aufgaben gedacht, bei denen man nachvollziehen möchte, welche Opcodes der Zend-Engine während eines bestimmten Codeabschnitts tatsächlich ausgeführt wurden.
Nach dem Aufruf von phpdbg_start_oplog() werden alle folgenden Opcode-Ausführungen intern mitgeschrieben. Mit phpdbg_end_oplog() wird die Aufzeichnung beendet und die gesammelten Daten als Array zurückgegeben. Das ermöglicht es, gezielt einzelne Codeabschnitte zu analysieren, ohne das gesamte Skript zu belasten.
Typische Einsatzgebiete sind die Analyse von Optimierungspotenzial in kritischen Code-Pfaden, das Verstehen der internen Arbeitsweise des PHP-Compilers sowie die Entwicklung und das Testen von Opcode-Caches oder JIT-Konfigurationen.
Hinweis: Diese Funktion ist nur verfügbar, wenn PHP im phpdbg-SAPI ausgeführt wird. In anderen SAPIs (z. B. CLI, FPM, Apache) existiert sie nicht und führt zu einem fatalen Fehler, wenn sie aufgerufen wird.
Rückgabewert
Beispiele
Einfache Oplog-Aufzeichnung eines Codeabschnitts
<?php
// Nur im phpdbg-SAPI verfügbar!
phpdbg_start_oplog();
$summe = 0;
for ($i = 0; $i < 10; $i++) {
$summe += $i;
}
$log = phpdbg_end_oplog();
print_r($log);
Oplog mit Detailoption auslesen
<?php
// Nur im phpdbg-SAPI verfügbar!
phpdbg_start_oplog();
function berechne(int $n): int {
return $n * $n;
}
$ergebnis = berechne(5);
// Detailliertes Log mit Opcode-Namen anfordern
$log = phpdbg_end_oplog(['silent' => false]);
foreach ($log as $datei => $zeilen) {
echo "Datei: $datei\n";
foreach ($zeilen as $zeile => $opcodes) {
echo " Zeile $zeile: " . implode(', ', $opcodes) . "\n";
}
}
// Wichtig · Fallstricke
SAPI-Beschränkung: phpdbg_start_oplog() ist ausschließlich im phpdbg-SAPI verfügbar. Ein Aufruf in anderen Umgebungen (CLI, FPM, Web-Server) führt zu einem fatalen Fehler (Call to undefined function). Prüfe die Verfügbarkeit gegebenenfalls mit function_exists('phpdbg_start_oplog').
Verschachtelte Aufrufe von phpdbg_start_oplog() ohne zwischenzeitliches phpdbg_end_oplog() können zu unerwartetem Verhalten führen. Stelle sicher, dass jeder Start mit einem korrespondierenden Ende gepaart ist.
Das Oplog kann bei intensiver Nutzung erhebliche Mengen an Speicher belegen, da alle ausgeführten Opcodes gesammelt werden. Beschränke die Aufzeichnung daher auf kurze, gezielte Codeabschnitte.