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