Avatar billede bacce.dk Nybegynder
26. april 2003 - 00:10 Der er 13 kommentarer og
1 løsning

antal MB i dir ++

Hejsa
Jeg har denne funktion til at tjekke hvor mange MB der bruges i mit dit.

function dir_size($dir) {
  $current_dir_size = 0;
  if(($handle = opendir($dir)) === false) die("Biblioteket $dir kan ikke åbnes");
  while(($file = readdir($handle)) !== false) {
    $curfile = $dir . '/' . $file;
    if(is_file($curfile)) {
      $current_dir_size += filesize($curfile);
    } elseif(is_dir($curfile) && $file != '..' && $file != '.') {
      $current_dir_size += dir_size($curfile);
    }
  }
  closedir($handle);
  //return $current_dir_size;
  $current_dir_size=round($current_dir_size/1024/1024);
  echo "$current_dir_size MB";
}

det virker som sådan fint nok, der er bare et problem.
hvis jeg opretter en mappe i dette dir, melder den ud med fejl.
hvorfor og hvad er der galt. den skal tælle antal MB i dette dir + alle under dirs.

kan nogen hjælpe ?
Avatar billede schaefner Juniormester
26. april 2003 - 00:25 #1
Avatar billede bacce.dk Nybegynder
26. april 2003 - 00:36 #2
hehe nej det går sku ikke.
den retunerer 6879 MB
det må siges at være sådan ca det der ligger af data på hele harddisken, jeg vil kun have denne mappe + undermapper
Avatar billede schaefner Juniormester
26. april 2003 - 00:38 #3
Jamen, kan du ikke bare vælge den mappe så?
<?php
$df = disk_total_space("mappe/mappe1/");
?>
Avatar billede schaefner Juniormester
26. april 2003 - 00:40 #4
Men jeg skal ikke kunne sige det, jeg har aldrig brugt den funktion før :)
Avatar billede bacce.dk Nybegynder
26. april 2003 - 00:41 #5
det er det jeg gør meen den tager "/" i stedet :-(

den ser sådan her ud..

function dir_size($dir)
    {
    $current_dir_size = disk_total_space("$dir");
    $current_dir_size=round($current_dir_size/1024/1024);
    echo "$current_dir_size MB";
    }

$dir indeholder den absolute sti til den mappe jeg ønsker at have størelsen på.


og forresten jeg har lige tjekket... jeg har slet ikke så meget plads brugt i MB på hele den disk, såå et eller andet går da helt galt med den funktion
Avatar billede schaefner Juniormester
26. april 2003 - 00:45 #6
Fandt lige denne inde på php.net:

If you want to use this to give the user the size of his account (or the admin the size of the user's folder) in a more human readable format, you can use this

function dirsize($dir) {
  $dh = opendir($dir);
  $size = 0;
  while (($file = readdir($dh)) !== false)
      if ($file != "." and $file != "..") {
          $path = $dir."/".$file;
          if (is_dir($path))
              $size += dirsize($path);
          elseif (is_file($path))
              $size += filesize($path);
      }
  closedir($dh);
  $mgs_size = $size/1048576;   
  return $mgs_size;
}
Avatar billede bacce.dk Nybegynder
26. april 2003 - 00:46 #7
ya fandt den også men den giver presist samme fejl som det stykke kode jeg selv havde i
Avatar billede bacce.dk Nybegynder
26. april 2003 - 00:49 #8
hmm ser lige noget...
fejlen den kommer ud med ser sådan her ud
Fatal error: Call to undefined function: dirsize()
og sådan i koden
$size += dirsize($path);

hvorfor er dirsize() kun en funktion hvis der kun er en mappe uden undermapper ??
Avatar billede schaefner Juniormester
26. april 2003 - 00:54 #9
Den her lader til at virke hos mig:

<?php
function dirsize($dir) {
    $dh = opendir($dir);
    $size = 0;
    while (($file = readdir($dh)) !== false) {
        if ($file != "." && $file != "..") {
            $path = $dir."/".$file;
            if (is_dir($path)) {
                $size += dirsize($path);
            } elseif (is_file($path)) {
                $size += filesize($path);
            }
        }
    }
    closedir($dh);
    return $size;
}

$totalsize = round((dirsize("docs")/1048576), 1);
echo number_format($totalsize, 1, ',', ' ');
Avatar billede bacce.dk Nybegynder
26. april 2003 - 00:58 #10
hmm nu er problemet måske lidt at mit script ligger i en OOP fil så jeg kan ik kalde funktionerne på samme måde som normalt, meen vil lige prøve noget med dit eks engang 2 sec
Avatar billede bacce.dk Nybegynder
26. april 2003 - 01:07 #11
ok nu har jeg redigeret lidt i den og nu ser den sådan her ud...

function dirsize($dir) {
    $dh = opendir($dir);
    $size = 0;
    while (($file = readdir($dh)) !== false) {
        if ($file != "." && $file != "..") {
            $path = $dir."/".$file;
            if (is_dir($path)) {
                $size += $this->dirsize($path);
            } elseif (is_file($path)) {
                $size += filesize($path);
            }
        }
        $total=round($size/1024/1024);
    }
    echo "$total MB";
}

problemet nu er at den udskriver dem for hver dir. p.t. sådan her
0 MB1 MB

hvor 1 er det første dit og 0 er subdir
Avatar billede bacce.dk Nybegynder
26. april 2003 - 01:22 #12
okeyy. nu kom der endelig opklaring på problemet....

Jeg har gjordt sådan her nu...

function dirsize($dir) {
 
  $dh = opendir($dir);
  $size = 0;
  while (($file = readdir($dh)) !== false)
      if ($file != "." && $file != "..") {
          $path = $dir."/".$file;
          if (is_dir($path))
            $size += $this->dirsize($path);
          elseif (is_file($path))
            $size += filesize($path);
      }
  closedir($dh);
  return $size;

}

og i kaldet gør jeg følgende

$totalsize = round(($this->dirsize("$dir") / 1048576), 1);
                                    echo number_format($totalsize, 1, ',', ' ');

så virker den også i OOP :-)

svarer du en gang ?? så lukker vi spm
Avatar billede schaefner Juniormester
26. april 2003 - 01:40 #13
jamen, det gør jeg da så
Avatar billede bacce.dk Nybegynder
26. april 2003 - 11:21 #14
Skide godt ;-)
Tak for hjælpen du
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester