<?php $units = explode(' ', 'B KB MB GB TB PB'); $SIZE_LIMIT = 53687091; // 50 MB $disk_used = foldersize("/var/customers/webs/xyz/root/"); $disk_remaining = $SIZE_LIMIT - $disk_used; echo('Full website size: ' . format_size($disk_used)); function foldersize($path) { $total_size = 0; $files = scandir($path); $cleanPath = rtrim($path, '/'). '/'; foreach($files as $t) { if ($t<>"." && $t<>"..") { $currentFile = $cleanPath . $t; if (is_dir($currentFile)) { $size = foldersize($currentFile); $total_size += $size; } else { $size = filesize($currentFile); $total_size += $size; } } } return $total_size; } function format_size($size) { global $units; $mod = 1024; for ($i = 0; $size > $mod; $i++) { $size /= $mod; } $endIndex = strpos($size, ".")+3; return substr( $size, 0, $endIndex).' '.$units[$i]; } ?>
Seite 1 von 1
Dir_size von zwei Ordnern
#1
geschrieben 20. März 2016 - 11:38
Mein aktueller Code gibt nur einen Ordner aus, ich bräuchte dieses aber für zwei. Hilfe?
Anzeige
#2
geschrieben 20. März 2016 - 12:07
Jetzt mal grob aus der Hüfte geschossen:
alle fraglichen Pfade in ein Array schreiben,
Das ist jetzt allerdings Perl. In php müsstest du das noch umschreiben.
Allerdings sieht das ganze unnötig aufwändig aus, da der Code sich selbst alle Dateien in dem Projekt anschaut.
Deutlich eleganter geht das mit dem Programmchen 'du' was jedes Linuxsystem haben sollte:
gibt dir eine Liste der Verzeichnisse mit Größe in der passenden Maßeinheit.
mit dem Schalter -b gibt er das in Bytes aus, falls du weiterrechnen willst.
alle fraglichen Pfade in ein Array schreiben,
foreach (@array) { $size = foldersize $_; $cumulativesize += size; print "Directory $_ uses $size\n"; } print "Full website Size is $cumulatievsize\n";
Das ist jetzt allerdings Perl. In php müsstest du das noch umschreiben.
Allerdings sieht das ganze unnötig aufwändig aus, da der Code sich selbst alle Dateien in dem Projekt anschaut.
Deutlich eleganter geht das mit dem Programmchen 'du' was jedes Linuxsystem haben sollte:
du -Dcsh 'Directory1' 'Directory2' ... 'DirectoryN'
gibt dir eine Liste der Verzeichnisse mit Größe in der passenden Maßeinheit.
mit dem Schalter -b gibt er das in Bytes aus, falls du weiterrechnen willst.
Dieser Beitrag wurde von Sturmovik bearbeitet: 20. März 2016 - 12:09
«Geschichte wiederholt sich nicht, aber sie reimt sich» (Mark Twain)
Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.
True Cloudstorage
Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.
True Cloudstorage
#3
geschrieben 20. März 2016 - 12:29
strpos() auf eine Zahl?
--> printf('%.0d', $size);
Ansonsten, mh, in Anbetracht der Tatsache daß SIZE_LIMIT = 50 MB ist, wirst Du wohl nicht in die Verlegenheit kommen, ${size}s in GB-Größenordnungen berücksichtigen zu müssen. Oder darüber, was das anbelangt.
Wie schon geschrieben wirkt der Code arg aufgeblasen. Ist das Ganze für eine Website? Oder innerhalb einer Kommandozeile als Script? Insbesondere: wie portierbar muß das Ganze sein?
Ein system("du \"$path\"") ist zwar nicht sehr elegant, tut aber was es soll, jedenfalls auf unixoiden Plattformen.
--> printf('%.0d', $size);
Ansonsten, mh, in Anbetracht der Tatsache daß SIZE_LIMIT = 50 MB ist, wirst Du wohl nicht in die Verlegenheit kommen, ${size}s in GB-Größenordnungen berücksichtigen zu müssen. Oder darüber, was das anbelangt.
Wie schon geschrieben wirkt der Code arg aufgeblasen. Ist das Ganze für eine Website? Oder innerhalb einer Kommandozeile als Script? Insbesondere: wie portierbar muß das Ganze sein?
Ein system("du \"$path\"") ist zwar nicht sehr elegant, tut aber was es soll, jedenfalls auf unixoiden Plattformen.
#4
geschrieben 20. März 2016 - 12:34
So, mal eben in php übersetzt und getestet:
Die Funktionen bleiben unangetastet (alle Änderungen sind in Zeile 4-11)
Aber wie oben schon durch mich & Ralph erwähnt: unnötig aufgeblasener Code.
Und der Typ der damals angefangen hat "Directorys" in "Folders" umzubenennen gehört erschlagen, gevierteilt, frittiert und erschossen. In der Reihenfolge;
<?php $units = explode(' ', 'B KB MB GB TB PB'); $SIZE_LIMIT = 53687091; // 50 MB $folders = array("/home/sturmovik/catvideos","/home/sturmovik/porn" ); $disk_used = 0; foreach ($folders as $dir) { $dir_used = foldersize($dir); $disk_used += $dir_used; echo("Dir size of " . $dir . " is " . $dir_used."\n"); } // $disk_used = foldersize(""); $disk_remaining = $SIZE_LIMIT - $disk_used; echo('Full website size: ' . format_size($disk_used)."\n");
Die Funktionen bleiben unangetastet (alle Änderungen sind in Zeile 4-11)
Aber wie oben schon durch mich & Ralph erwähnt: unnötig aufgeblasener Code.
Und der Typ der damals angefangen hat "Directorys" in "Folders" umzubenennen gehört erschlagen, gevierteilt, frittiert und erschossen. In der Reihenfolge;
Dieser Beitrag wurde von Sturmovik bearbeitet: 20. März 2016 - 12:35
«Geschichte wiederholt sich nicht, aber sie reimt sich» (Mark Twain)
Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.
True Cloudstorage
Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.
True Cloudstorage
- ← Batch Programm um altuellen Ordner zu Substituieren
- Skript/Web-Programmierung
- Wenn Ping erfolgreich auf Domaincontroller, REG Änderungen setzen →
Thema verteilen:
Seite 1 von 1