Hmm... MB ausrechnen mit PHP... geht net!



  • Hi Leute!

    Man hat mir im Thema PHP-Problem gesagt, weil der mir anstatt MB 36125224960 Bytes anzeigt, in MB anzeigen lässt, dass man einfach das durch 2 mal 1024 teilen muss.

    Nur dann komme ich auf 1768 MB! und das kann NICHT sein, da ich ja nur 30MB zur verfpügung habe! Wie sage ich dem Skript, das der mir das automatisch in MB anzeigen soll?
    Hier das jetztige Skript:

    <?
    $df = disk_total_space("/");
    
    echo "Noch ";
    echo $df;
    echo " frei!";
    ?>
    


  • Nicht durch 2*1024 sondern 2 mal durch 1024, also durch 1024*1024!
    Das Problem ist aber, dass du nicht den für dich verfügbaren Speicher angezeigt bekommst, sondern die Größe der Festplatte (ca. 30 GB)! 😞



  • Aber: ich habe anstatt / nicht / sondern "downloads/" drin!

    Das heisst, mein ordner.. ODER ich mache es so:

    "/programmer/downloads/"... hmm na ja.,,,
    DANKE!



  • Nein! die Funktion liefert dir immer! den Speicherplatz auf der Festplatten!
    Warte mal, ich geb dir ein bischen Code!



  • function dirsize($directory)
    {
     if (!is_dir($directory)) return -1;
     $size = 0;
    
     if ($DIR = opendir($directory))
     {
      while (($dirfile = readdir($DIR)) !== false)
      {
       if (is_link($directory . '/' . $dirfile) || $dirfile == '.' || $dirfile == '..') {
        continue;
       }
       if (is_file($directory . '/' . $dirfile)) {
        $size += filesize($directory . '/' . $dirfile);
       }
       else if (is_dir($directory . '/' . $dirfile)) {
        $dirSize = dirsize($directory . '/' . $dirfile);
        if ($dirSize >= 0) $size += $dirSize;
        else return -1;
       }
      }
      closedir($DIR);
     }
     return $size;
    }
    
    function format_size($rawSize)
    {
     return round($rawSize/1048576, 2).' MB';
    }
    

    Das Ganze rufst du jetzt so auf

    $mb_size = format_size( dirsize('/downloads') );
    

    Der Quelltext stammt weitgehen von php.net und steht bei disk_total_space (hast wohl nicht so genau geschaut!) 😉



  • Steht bei disk_total_space??
    Oha! Habs nicht gesehen! Danke!! 😉
    😃



  • Okay... hab jetzt so:

    <?
    function dirsize($directory)
    {
     if (!is_dir($directory)) return -1;
     $size = 0;
    
     if ($DIR = opendir($directory))
     {
      while (($dirfile = readdir($DIR)) !== false)
      {
       if (is_link($directory . 'downloads/' . $dirfile) || $dirfile == '.' || $dirfile == '..') {
        continue;
       }
       if (is_file($directory . 'downloads/' . $dirfile)) {
        $size += filesize($directory . 'downloads/' . $dirfile);
       }
       else if (is_dir($directory . 'downloads/' . $dirfile)) {
        $dirSize = dirsize($directory . 'downloads/' . $dirfile);
        if ($dirSize >= 0) $size += $dirSize;
        else return -1;
       }
      }
      closedir($DIR);
     }
     return $size;
    }
    
    function format_size($rawSize)
    {
     return round($rawSize/1048576, 2).' MB';
    }
    $mb_size = format_size( dirsize('/downloads') );
    
    echo "Noch ";
    echo $mb_size;
    echo " MB frei!";
    
    ?>
    

    Aber mir wird angezeigt: NOCH -0MB frei!!! Aber es sind ja noch 29MB frei in wirklichkeit! komisch... 😕



  • Dummer Troll oder wirklich ziemlich dämlich. :p



  • <?
    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); 
     return $size; 
    }
    
    function format_size($rawSize)
    {
     return round($rawSize/1048576, 2);
    }
    $mb_free = 25 - format_size(dirsize('./downloads'));
    
    echo "Noch ".$mb_free." MB frei!";
    ?>
    

    Ich dem Ordner, in dem sich dieses Script befindet muss natürlich auch ein Ordner 'downloads' existieren!

    Die Funktion dirsize an sich ermittelt die Anzahl an Bytes, die das angegebene Verzeichnis belegt - nicht den noch freien Speicherplatz!

    [ Dieser Beitrag wurde am 15.12.2002 um 09:27 Uhr von flenders editiert. ]



  • Ach so! Thx!


Anmelden zum Antworten