Start · Sprachen · PHP · Referenz · xhprof_disable

xhprof_disable

Funktion

Stoppt den xhprof-Profiler und gibt die gesammelten Profiling-Daten als assoziatives Array zurück.

seit PHP PECL xhprof >= 0.9.2 Kategorie: misc

Signatur

xhprof_disable(): array

Beschreibung

xhprof_disable() beendet eine zuvor mit xhprof_enable() gestartete Profiling-Sitzung und liefert alle während der Messung gesammelten Laufzeit- und Aufrufstatistiken zurück. Die Funktion ist Teil der PECL-Erweiterung xhprof, einem leichtgewichtigen hierarchischen PHP-Profiler, der ursprünglich von Facebook entwickelt wurde.

Die Rückgabe ist ein assoziatives Array, dessen Schlüssel Funktionsaufruf-Paare im Format "Elternfunktion==>Kindfunktion" darstellen. Jedem Paar ist wiederum ein Array mit Metriken wie ct (Call Count), wt (Wall Time in Mikrosekunden), cpu (CPU-Zeit) und mu / pmu (Speicherverbrauch) zugeordnet – je nachdem, welche Flags beim Start übergeben wurden.

Die gesammelten Rohdaten können anschließend gespeichert (z. B. in einer Datei oder Datenbank) und mit dem mitgelieferten xhprof_html-Viewer oder kompatiblen Tools wie Tideways oder uprofiler visualisiert werden. Typischerweise wird xhprof_disable() am Ende des PHP-Skripts oder in einem Shutdown-Handler aufgerufen.

Zu beachten ist, dass xhprof selbst als PECL-Erweiterung installiert sein muss (pecl install xhprof) und in der php.ini aktiviert werden muss. Für PHP 7+ und PHP 8 empfehlen sich Alternativen wie tideways_xhprof oder uprofiler.

Rückgabewert

Typ
array
Beschreibung
Gibt ein assoziatives Array mit den Profiling-Daten zurück. Schlüssel sind Zeichenketten im Format "Elternfunktion==>Kindfunktion"; Werte sind Arrays mit Metriken wie ct (Anzahl der Aufrufe), wt (Wall-Time in µs), cpu, mu und pmu – abhängig von den beim Start mit xhprof_enable() gesetzten Flags.

Beispiele

Einfaches Profiling eines Code-Abschnitts

<?php
// Profiler starten
xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

// Code, der profiliert werden soll
function berechneSumme(array $zahlen): int {
    return array_sum($zahlen);
}

$daten = range(1, 10000);
$summe = berechneSumme($daten);

// Profiler stoppen und Daten abrufen
$profilingDaten = xhprof_disable();

// Daten ausgeben (zur Übersicht)
foreach ($profilingDaten as $aufruf => $metriken) {
    echo $aufruf . ': Aufrufe=' . $metriken['ct']
        . ', Wall-Time=' . $metriken['wt'] . 'µs' . PHP_EOL;
}
main()==>berechneSumme: Aufrufe=1, Wall-Time=120µs main()==>range: Aufrufe=1, Wall-Time=850µs ...

Profiling-Daten in einer Datei speichern

<?php
require_once '/pfad/zu/xhprof_lib/utils/xhprof_lib.php';
require_once '/pfad/zu/xhprof_lib/utils/xhprof_runs.php';

// Profiler starten
xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

// Zu profilierender Anwendungscode
$daten = array_map(fn($x) => $x ** 2, range(1, 5000));
$summe = array_sum($daten);

// Profiler stoppen
$profilingDaten = xhprof_disable();

// Daten mit xhprof-Hilfsfunktionen speichern
$xhprofRuns = new XHProfRuns_Default('/tmp/xhprof');
$runId = $xhprofRuns->save_run($profilingDaten, 'meine_app');

echo 'Profiling-Run gespeichert. Run-ID: ' . $runId . PHP_EOL;
echo 'Aufrufbar unter: http://localhost/xhprof_html/index.php?run=' . $runId . '&source=meine_app' . PHP_EOL;
Profiling-Run gespeichert. Run-ID: 64a3f1b2c9d87 Aufrufbar unter: http://localhost/xhprof_html/index.php?run=64a3f1b2c9d87&source=meine_app

// Wichtig · Fallstricke

Kompatibilität: Die originale xhprof-PECL-Erweiterung wird für PHP 7+ und PHP 8 offiziell nicht mehr gepflegt. Für moderne PHP-Versionen sollten Alternativen wie tideways_xhprof oder uprofiler verwendet werden, die eine weitgehend kompatible API bereitstellen.

Overhead: Das Aktivieren von XHPROF_FLAGS_CPU und XHPROF_FLAGS_MEMORY erzeugt zusätzlichen Overhead. In Produktionsumgebungen sollte Profiling nur gezielt und für kurze Zeiträume aktiviert werden, etwa per Feature-Flag oder Sampling.

Achtung: Wird xhprof_disable() aufgerufen, ohne dass vorher xhprof_enable() aufgerufen wurde, kann dies zu einem PHP-Fehler oder einer leeren Rückgabe führen.