login  Naam:   Wachtwoord: 
Registreer je!
 Forum

map grootte

Offline svm - 07/07/2006 12:27 (laatste wijziging 07/07/2006 12:27)
Avatar van svmPHP ver gevorderde Ik zoek een scriptje (liefst één regel) die de grootte van een map aangeeft.
Ik heb verschillende dingen geprobeerd als:
Citaat:
filesize('map/');
file_size('map/');
mapsize('map/');
map_size('map/');
dirsize('map/');
enz.....

Werkt allemaal niet.
Weet iemand de oplossing?

11 antwoorden

Gesponsorde links
Offline Stijn - 07/07/2006 12:31
Avatar van Stijn PHP expert Ik vind niet direct een functie daarvoor dus je maakt een eigen functie. Ik zal eens zien. de theorie is easy: je telt gewoon de file_size's van de files op en je hebt de mapgroote.
Offline svm - 07/07/2006 12:36
Avatar van svm PHP ver gevorderde ja, maar uitlezen en opnemen is een omweg.
Het is voor een systeem dat automatisch aan gemaakt wordt, dus het liefst zo min mogelijk troep erin.
Offline Stijn - 07/07/2006 12:39 (laatste wijziging 07/07/2006 13:00)
Avatar van Stijn PHP expert ik heb een functie snel geschreven:
  1. <?php
  2.  
  3. /**
  4.  * een functie die de grote van je map berekend
  5.  *
  6.  * @param string $map
  7.  * @param float|integer $size
  8.  * @return float|integer
  9.  */
  10. function dir_size( $map , $size = 0 )
  11. {
  12.  
  13. $dir = opendir( $map );
  14.  
  15. while( $file = readdir( $dir ) ) {
  16.  
  17. if( is_dir( $file ) === true ) {
  18. dir_size( $file , &$size );
  19. } else {
  20. $size += filesize( $file );
  21. }
  22.  
  23. }
  24.  
  25. return $size;
  26.  
  27. }
  28.  
  29.  
  30. #################
  31. # how to use it #
  32. #################
  33.  
  34. echo dir_size('./');
  35. ?>


kzal hem nog effe testen

[edit]

er zitten wat bugjes in, ff repairen
Offline svm - 07/07/2006 13:22
Avatar van svm PHP ver gevorderde Nu krijg ik een error 500 (interne server fout).
Maar, goed er zaten bugs in dus ik wacht af, BVD.
Offline Dark_Paul - 07/07/2006 19:20
Avatar van Dark_Paul PHP ver gevorderde stijn, sinds wanneer zet jij 3x '=' neer?
  1. if( is_dir( $file ) === true )

moet dat neit dit zijn?
  1. if( is_dir( $file ) == true )
Offline marten - 07/07/2006 19:23
Avatar van marten Beheerder bij een controle op een boolean (true,false) kan je 3x = gebruiken
Offline Dark_Paul - 07/07/2006 19:36
Avatar van Dark_Paul PHP ver gevorderde okej, weer wat bijgeleerd maar 2 kan toch ook?
Offline svm - 07/07/2006 19:39 (laatste wijziging 07/07/2006 20:00)
Avatar van svm PHP ver gevorderde Ik gebruik altijd 2X.
Offline MothZone - 07/07/2006 20:19
Avatar van MothZone PHP ver gevorderde Als je if(1 == true) doet, geeft hij true, ookal vergelijk je een int met een boolean.
Als je if(1 === true) doet, geeft hij false, want een integer is geen boolean.
Offline svm - 07/07/2006 20:30
Avatar van svm PHP ver gevorderde Nou, gebruiken jullie dit topic maar om offtopic te zijn (zoals jullie al doen).
Ik heb de oplossing namelijk al (ook al is hij wat omslagtig).

  1. <?php
  2.  
  3. function dirsize($dir,$scan_subdirs = true) {
  4. $file_list = '';
  5. $size = '';
  6. $stack[] = $dir;
  7. while ($stack) {
  8. $current_dir = array_pop($stack);
  9. if ($dh = opendir($current_dir)) {
  10. while (($file = readdir($dh)) !== false) {
  11. if ($file !== '.' && $file !== '..') {
  12. $current_file = "{$current_dir}/{$file}";
  13. if (is_file($current_file)) {
  14. if($scan_subdirs){
  15. $size = $size + filesize("{$current_dir}/{$file}");
  16. }
  17. else{
  18. $size = $size + filesize($file);
  19. }
  20. }
  21. elseif ($scan_subdirs && is_dir($current_file)) {
  22. $stack[] = $current_file;
  23. }
  24. }
  25. }
  26. }
  27. }
  28. return $size;
  29. }
  30.  
  31. function getfilesize($bytes) {
  32. if ($bytes >= pow(2,40)) {
  33. $return = round($bytes / pow(1024,4), 2);
  34. $suffix = "TB";
  35. } elseif ($bytes >= pow(2,30)) {
  36. $return = round($bytes / pow(1024,3), 2);
  37. $suffix = "GB";
  38. } elseif ($bytes >= pow(2,20)) {
  39. $return = round($bytes / pow(1024,2), 2);
  40. $suffix = "MB";
  41. } elseif ($bytes >= pow(2,10)) {
  42. $return = round($bytes / pow(1024,1), 2);
  43. $suffix = "KB";
  44. } else {
  45. $return = $bytes;
  46. $suffix = "Byte";
  47. }
  48. if ($return == 1) {
  49. $return .= " " . $suffix;
  50. } else {
  51. $return .= " " . $suffix . "s";
  52. }
  53. return $return;
  54. }
  55.  
  56. echo getfilesize(dirsize("."));
  57. ?>

Bron: PHP hulp - map_size
Offline Maarten - 07/07/2006 22:48
Avatar van Maarten Erelid 1) Men gaat niet offtopic maar maakt zinvolle opmerkingen die bijdragen tot het topic
2) Je manier is niet omslachtig maar wel reeds beschreven door Stijn.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.308s