Start · Sprachen · PHP · Referenz · realpath_cache_size

realpath_cache_size

Funktion

Gibt die aktuell belegte Größe des Realpath-Caches in Bytes zurück.

seit PHP 5.3.2 Kategorie: io

Signatur

realpath_cache_size(): int

Beschreibung

realpath_cache_size() liefert die Menge an Speicher in Bytes, die der interne PHP-Realpath-Cache momentan belegt. Der Realpath-Cache speichert aufgelöste Pfade (z. B. nach realpath(), file_exists() oder include-Anweisungen), um wiederholte Dateisystem-Zugriffe zu vermeiden und die Performance zu steigern.

Die Funktion ist besonders nützlich für Diagnose- und Monitoring-Zwecke: Wenn der zurückgegebene Wert nahe an dem über realpath_cache_get() ermittelbaren Maximum liegt, kann es sinnvoll sein, die INI-Direktive realpath_cache_size in der php.ini zu erhöhen, um Cache-Verdrängung zu vermeiden.

Zusammen mit realpath_cache_get() – das den vollständigen Cache-Inhalt als Array zurückgibt – ermöglicht diese Funktion eine genaue Überwachung des Dateipfad-Caching-Verhaltens einer Anwendung. Gerade in großen Projekten mit vielen Dateizugriffen (z. B. Frameworks, CMS) ist dies relevant.

Der Cache ist ein Pro-Prozess-Cache und wird nicht zwischen verschiedenen PHP-Prozessen oder Requests geteilt (außer bei Einsatz von OpCode-Caches wie OPcache, die eigene Mechanismen mitbringen).

Rückgabewert

Typ
int
Beschreibung
Gibt die aktuell vom Realpath-Cache belegte Speichermenge in Bytes als Ganzzahl zurück.

Beispiele

Aktuelle Cache-Größe ausgeben

<?php
// Einige Dateizugriffe durchführen, um den Cache zu füllen
file_exists(__FILE__);
realpath(__DIR__ . '/index.php');

$size = realpath_cache_size();
echo 'Realpath-Cache belegt: ' . $size . ' Bytes' . PHP_EOL;
// Ausgabe z. B.: Realpath-Cache belegt: 1024 Bytes
Realpath-Cache belegt: 1024 Bytes

Cache-Auslastung überwachen und warnen

<?php
// Maximale Cache-Größe aus der php.ini lesen (in Bytes)
$maxSize = ini_get('realpath_cache_size');
// INI-Werte wie '4M' in Bytes umrechnen
$unit = strtoupper(substr(trim($maxSize), -1));
$value = (int) $maxSize;
$bytes = match ($unit) {
    'G' => $value * 1024 ** 3,
    'M' => $value * 1024 ** 2,
    'K' => $value * 1024,
    default => $value,
};

$current = realpath_cache_size();
$percent = round(($current / $bytes) * 100, 2);

echo sprintf(
    'Realpath-Cache: %d / %d Bytes (%.2f %% ausgelastet)' . PHP_EOL,
    $current,
    $bytes,
    $percent
);

if ($percent > 80) {
    echo 'Warnung: Realpath-Cache ist zu mehr als 80 % belegt. Erhöhen Sie realpath_cache_size in der php.ini.' . PHP_EOL;
}
Realpath-Cache: 2048 / 4194304 Bytes (0.05 % ausgelastet)

// Wichtig · Fallstricke

Hinweis: Die Funktion liefert nur sinnvolle Werte, wenn der Realpath-Cache aktiviert ist. Er ist standardmäßig aktiv, kann aber über die INI-Direktive realpath_cache_size=0 deaktiviert werden – in diesem Fall gibt die Funktion immer 0 zurück.

CLI vs. Web: Im CLI-Modus wird der Cache nur für die Dauer eines einzelnen Skript-Laufs gehalten. Im Web-Server-Modus (z. B. PHP-FPM) teilen Worker-Prozesse keinen gemeinsamen Cache; jeder Prozess hat seinen eigenen.

OPcache: Bei aktiviertem OPcache kann die Datei-Auflösung durch dessen internen Cache beeinflusst werden, was die über realpath_cache_size() gemessenen Werte verringern kann.