Start · Sprachen · PHP · Referenz · phpdbg_end_oplog

phpdbg_end_oplog

Funktion

Beendet die Aufzeichnung eines Oplogs im PHPDBG-Debugger und gibt die aufgezeichneten Opcode-Daten als Array zurück.

seit PHP 5.6.0 Kategorie: misc

Signatur

phpdbg_end_oplog(): array

Beschreibung

phpdbg_end_oplog() beendet eine zuvor mit phpdbg_start_oplog() gestartete Opcode-Aufzeichnung (Oplog) und gibt alle seit dem Start aufgezeichneten Opcodes zurück. Diese Funktion steht ausschließlich in der PHPDBG-Umgebung zur Verfügung, dem interaktiven PHP-Debugger, der seit PHP 5.6 als integrierter Bestandteil von PHP ausgeliefert wird.

Das zurückgegebene Array enthält detaillierte Informationen über die ausgeführten Opcodes, einschließlich der Quelldatei, der Zeilennummer und des Opcode-Typs. Dies erlaubt Entwicklern eine genaue Analyse des ausgeführten PHP-Bytecodes, was für Performance-Profiling, Debugging und das Verständnis des PHP-Execution-Workflows nützlich ist.

Die Funktion wird typischerweise im Zusammenspiel mit phpdbg_start_oplog() verwendet: Zuerst wird die Aufzeichnung gestartet, dann der zu untersuchende Code ausgeführt, und schließlich wird phpdbg_end_oplog() aufgerufen, um die Aufzeichnung zu beenden und die gesammelten Daten abzurufen. Die gesammelten Daten können anschließend analysiert, gespeichert oder ausgegeben werden.

Hinweis: Diese Funktion ist nur innerhalb des PHPDBG-SAPIs verfügbar und hat in anderen Umgebungen (z. B. CLI, FPM, Apache) keinen Effekt bzw. ist nicht definiert.

Rückgabewert

Typ
array
Beschreibung
Gibt ein assoziatives Array zurück, das die aufgezeichneten Opcode-Informationen seit dem letzten Aufruf von phpdbg_start_oplog() enthält. Jeder Eintrag enthält Angaben wie Dateiname, Zeilennummer und ausgeführten Opcode-Typ.

Beispiele

Einfache Oplog-Aufzeichnung eines Code-Blocks

<?php
// Nur innerhalb von PHPDBG verfügbar
if (function_exists('phpdbg_start_oplog')) {
    // Oplog-Aufzeichnung starten
    phpdbg_start_oplog();

    // Zu analysierender Code-Block
    $result = array_map(function($x) {
        return $x * 2;
    }, range(1, 5));

    // Oplog-Aufzeichnung beenden und Daten abrufen
    $oplog = phpdbg_end_oplog();

    // Aufgezeichnete Opcodes ausgeben
    print_r($oplog);
} else {
    echo 'phpdbg_end_oplog() ist nur in der PHPDBG-Umgebung verfügbar.' . PHP_EOL;
}
phpdbg_end_oplog() ist nur in der PHPDBG-Umgebung verfügbar.

Oplog für Performance-Analyse nutzen

<?php
// Nur innerhalb von PHPDBG verfügbar
if (function_exists('phpdbg_start_oplog')) {
    phpdbg_start_oplog();

    // Funktion, deren Opcodes analysiert werden sollen
    function berechneSumme(array $zahlen): int {
        return array_sum($zahlen);
    }

    $summe = berechneSumme([1, 2, 3, 4, 5]);

    $oplog = phpdbg_end_oplog();

    echo 'Summe: ' . $summe . PHP_EOL;
    echo 'Anzahl aufgezeichneter Opcodes: ' . count($oplog) . PHP_EOL;

    // Opcodes je Datei gruppieren
    foreach ($oplog as $datei => $opcodes) {
        echo 'Datei: ' . $datei . PHP_EOL;
        foreach ($opcodes as $zeile => $opcode) {
            echo '  Zeile ' . $zeile . ': ' . $opcode . PHP_EOL;
        }
    }
}

// Wichtig · Fallstricke

Umgebungsvoraussetzung: phpdbg_end_oplog() ist ausschließlich im PHPDBG-SAPI verfügbar. In anderen Ausführungsumgebungen wie CLI, FPM oder Webserver-Modulen ist die Funktion nicht definiert. Prüfe vor dem Aufruf stets mit function_exists('phpdbg_end_oplog'), ob die Funktion verfügbar ist.

Reihenfolge beachten: phpdbg_end_oplog() muss immer nach einem vorangegangenen phpdbg_start_oplog()-Aufruf verwendet werden. Ein Aufruf ohne vorherige Aufzeichnung kann zu unerwartetem Verhalten führen.

Nicht für Produktivbetrieb: Diese Funktion dient ausschließlich Debugging- und Analysezwecken und sollte nicht in produktivem Code eingesetzt werden.