Aktueller Standort: Startseite> Neueste Artikel> Vier praktische Möglichkeiten, um die Festplattengröße eines bestimmten Verzeichnisses zu erhalten

Vier praktische Möglichkeiten, um die Festplattengröße eines bestimmten Verzeichnisses zu erhalten

M66 2025-07-26

PHP implementiert die Methode, um die Gesamtgröße der Verzeichnisscheibe zu erhalten

In der täglichen Webentwicklung müssen wir manchmal den von einem Verzeichnis (einschließlich seiner Unterverzeichnisse) besetzten Festplattenraum erhalten, z. B. für Zwecke wie Quotengrenzen, Ressourcenstatistiken oder Protokollüberwachung. PHP bietet einige integrierte Funktionen, die uns helfen können, die Gesamtscheibengröße des Verzeichnisses leicht zu erhalten.

Verwenden Sie disk_total_space, um die Gesamtdiskapazität zu erhalten

disk_total_space () kann die Gesamtkapazität der Festplatte direkt erhalten, beachten Sie jedoch, dass sie die Kapazität der gesamten Festplatte zurückgibt, nicht die Größe, die das Verzeichnis tatsächlich einnimmt.

 
$directory = "/var/log";
$total_space = disk_total_space($directory);
echo "Gesamtscheibenkapazität:$total_space Byte";

Verwenden Sie DIR () und FileSize (), um Verzeichnisdateigrößen zu sammeln

Durch Überqueren des Verzeichnisses und das Lesen der Größe jeder Datei mit ADADISIZE () können Sie den tatsächlichen Speicherplatz des Verzeichnisses genauer einschätzen.

 
$directory = "/var/log";
$total_size = 0;
if ($dh = opendir($directory)) {
    while (($file = readdir($dh)) !== false) {
        if ($file != "." && $file != "..") {
            $total_size += filesize($directory . "/" . $file);
        }
    }
    closedir($dh);
}
echo "Gesamtscheibengröße:$total_size Byte";

Verwenden Sie RecursivIteratoriterator, um Größen zu zählen

Durch die Kombination von RecursiveRectoryToryIterator mit Recursivederatoriterator können Sie die Größe aller Dateien in einem Verzeichnis und seinem Subdirektor rekursiv erhalten, das für die Deep -Verzeichnisstruktur geeignet ist.

 
use RecursiveIteratorIterator;
use RecursiveDirectoryIterator;
use SplFileInfo;

$directory = "/var/log";
$total_size = 0;
$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($directory),
    RecursiveIteratorIterator::SELF_FIRST
);

foreach ($iterator as $file) {
    if ($file->isFile()) {
        $total_size += $file->getSize();
    }
}
echo "Gesamtscheibengröße:$total_size Byte";

Schnelle Implementierung mit scandir () und array_sum ()

Scandir () kann verwendet werden, um alle Dateinamen im Verzeichnis zu erhalten und Array_Map () und Array_Sum () zu kombinieren, um die Gesamtgröße auf präzise Weise zu berechnen. Diese Methode kann jedoch nicht rekursiv Subdirektorien und für parallele Verzeichnisstatistiken geeignet sein.

 
$directory = "/var/log";
$files = scandir($directory);
$total_size = array_sum(array_map("filesize", array_filter(
    array_map(function($file) use ($directory) {
        return $directory . '/' . $file;
    }, $files),
    function($file) {
        return is_file($file);
    }
)));
echo "Gesamtscheibengröße:$total_size Byte";

Vorschläge zur Leistungsoptimierung

  • Es wird empfohlen, eine rekursive Iteratormethode zu verwenden, um Leistung und Genauigkeit zu berücksichtigen.
  • Versuchen Sie, die Glob () -Funktion zu vermeiden, die in großen Ordnern nicht effizient ist.
  • Wenn Sie häufig die Verzeichnisgröße erhalten müssen, können Sie die Ergebnisse in die Datenbank- oder Cache -Datei untersuchen.

Zusammenfassen

PHP bietet eine Vielzahl von Möglichkeiten zur Berechnung der Verzeichnisscheibengröße mit jeweils anwendbaren Szenarien. Die Auswahl der richtigen Methode kann nicht nur die Ausführungseffizienz verbessern, sondern auch den Code prägnanter und zuverlässiger machen. Entwickler können es flexibel nach ihren eigenen Bedürfnissen verwenden.