Wieviel Platz belegt ein Verzeichnis

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wieviel Platz belegt ein Verzeichnis

    Hallo,

    kann ich mit PHP rausfinden, wieviel Platz ein verzeichnis belegt?

    Ich finde nur Funktionen, die Auskunft geben, was noch frei ist (diskfreespace,disk_total_space).

    Danke, Manfred
    Cocoa Entwicklertraining - Alles für die Apfelzucht

  • #2
    http://de2.php.net/manual/de/function.filesize.php klappt auch bei ordnern
    SQL Injection kitteh is...

    Kommentar


    • #3
      Ich mach das zur Zeit noch so:

      PHP-Code:
      function getFileList($dirname) {
          
      $files = array();
          
      $dir opendir$dirname );
          while( 
      $file readdir$dir ) ) 
          {
              {
                      
      $files[] = $file
                      
      $countfiles++;
                      
              }
          }

          return 
      $files



      function 
      getDirSize($dir) {

          
      $files getFileList($dir);

          
      $data 0;    
          for (
      $i 0$i Count($files); $i++) {
              if (
      is_dir($dir.$files[$i]) && $files[$i] != "." && $files[$i] != "..") {
                  
      $data += getDirSize($dir.$files[$i]."/");
              }
              else {
              if (
      file_exists($dir.$files[$i]) && $files[$i] != "." && $files[$i] != ".."
                  
      $data += filesize($dir.$files[$i]);
              }    
          }

          return 
      $data;

      Da müßte es aber auch was schnelleres geben, mit exec könnte man auch einen Linux Command machen, wäre schneller aber das will ich auch nicht.

      Zur Zeit ist es so ok, aber für was schnelleres wäre auch ich dankbar
      http://www.freehost-script.com

      Werden Sie Webhoster, mit Werbung auf den Userseiten, Php, Mysql, FTP

      Kommentar


      • #4
        @Seikilos: Wie ist das denn in dem Fall dann mit Subdirs?
        http://www.freehost-script.com

        Werden Sie Webhoster, mit Werbung auf den Userseiten, Php, Mysql, FTP

        Kommentar


        • #5
          Logisch= Subdirs werden mit berechnet.
          Wirklichkeit= keine ahnung

          Wenn du nur den inhalt ohne dirs haben willst, musst du die einzelnen Files durchballern und addieren
          SQL Injection kitteh is...

          Kommentar


          • #6
            mhh,

            man kommt wohl nicht drum rum, alles "durchzuwalken", da scheint mir ein Shellscript doch komfortabler. Dadurch geht aber die Platformunabhängigkeit flöten!
            Cocoa Entwicklertraining - Alles für die Apfelzucht

            Kommentar


            • #7
              Shell Script ist bei mir um den Faktor 10 schneller, aber ich kann es halt net machen, weil bei manchen Systemen das net flüppt......

              Hat einer jetzt ne Ahnung ob das mit fileSize($dir) auch klappt?

              In meinem konkreten Fall hat das Ding keine SUbdirs
              http://www.freehost-script.com

              Werden Sie Webhoster, mit Werbung auf den Userseiten, Php, Mysql, FTP

              Kommentar


              • #8
                Original geschrieben von Kleinbreuer
                Hat einer jetzt ne Ahnung ob das mit fileSize($dir) auch klappt?
                das manual? *g*
                ausporbieren?

                wird aber nicht gehen, denk eich

                du kannst es unter php höchstens mittels rekursion machen
                PHP-Code:
                function dir_size($dir)
                {
                    
                $totalsize=0;
                    if (
                $dirstream = @opendir($dir))
                    {
                        while (
                $filename readdir($dirstream))
                            if (
                $filename!='.' and $filename!='..')
                            {
                                if (
                is_file($dir.'/'.$filename))
                                {
                                    
                $info=stat($dir.'/'.$filename);
                                    if (
                $info['blksize']!=-1)
                                        
                $totalsize=$info['blksize']*$info['blocks'];
                                    else
                                        
                $totalsize+=filesize($dir.'/'.$filename);
                                }
                                if (
                is_dir($dir.'/'.$filename))
                                    
                $totalsize+=dir_size($dir.'/'.$filename);
                            }
                        
                closedir($dirstream);
                    }
                    return 
                $totalsize;

                oder halt per shellskript aber ich mach's so wie oben (weil shellskript wie du ja ganz richtig sagtest nich überall tut)
                Zuletzt geändert von mrhappiness; 09.06.2003, 10:44.
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Ok, cool....danke.

                  Ich probier mal deine Lösung, vielleicht ist die ja etwas performanter
                  http://www.freehost-script.com

                  Werden Sie Webhoster, mit Werbung auf den Userseiten, Php, Mysql, FTP

                  Kommentar


                  • #10
                    Wie wärs damit:

                    PHP-Code:
                    <?


                    $befehl="du -s {verzeichnisname}";
                    $ausgabe=exec ($befehl);
                    echo $ausgabe;

                    ?>
                    "du" hat noch ein paar schöne Optionen.

                    Gruss Manfred
                    Cocoa Entwicklertraining - Alles für die Apfelzucht

                    Kommentar


                    • #11
                      Mein Problem ist:

                      1. Funzt das mit Windoof Systemen nicht
                      2. Wenn PHP Safe-Mode läuft sind die exec Befehle IMO gesperrt

                      Oder wie sieht es damit aus?
                      http://www.freehost-script.com

                      Werden Sie Webhoster, mit Werbung auf den Userseiten, Php, Mysql, FTP

                      Kommentar


                      • #12
                        Ja klar, funzt mit win natürlich nicht. Man könnte vielleicht ne Abfrage machen ob win oder unix läuft, unkomlizierter wirds dadurch nicht.

                        Mit dem SafeMode bzw. wenn dein Provider garkeine Scripts zulässt gibts natürlich auch Schwierigkeiten.

                        In meinem Fall stört das allerdings nicht, weil das Ding eh nur unter Linux auf meinem Intranetserver läuft, und da ist es garantiert der schnellste und fehlerunanfälligste Weg.

                        Gruss
                        Cocoa Entwicklertraining - Alles für die Apfelzucht

                        Kommentar


                        • #13
                          Ja klar....du hast ja dann Individualsoftware.

                          Bei mir soll es aber kompatibel bleiben....deshalb das Problem
                          http://www.freehost-script.com

                          Werden Sie Webhoster, mit Werbung auf den Userseiten, Php, Mysql, FTP

                          Kommentar


                          • #14
                            Bisher wurde hier der slack space (also der "verschwendete" Speicher) nicht berücksichtigt. Wieviel Platz von einer Datei tatsächlich belegt wird, hängt nicht nur von ihrer Größe sondern auch von der Cluster-Größe auf dem Datenträger ab:
                            PHP-Code:
                            function cluster_size($dir)
                            {
                              
                            // Cluster-Größe = Platz, der für eine 1-Byte-Datei belegt wird
                              
                            if (substr($dir,-1))!='/'$dir.='/';
                              @
                            unlink($dir'slackdetect.txt');
                              
                            $fp fopen($dir'slackdetect.txt''w');
                              
                            fputs($fp'*');
                              
                            fclose($fp);
                              
                            $df disk_free_space($dir);
                              
                            unlink ($dir'slackdetect.txt');
                              return 
                            disk_free_space($dir) - $df;

                            $data = dir_size(..., $true); print_r($data); liefert genau die Daten, die Windows auch als Ordner-Eigenschaften liefert: Anzahl der Dateien ($data['files']) und Ordner ($data['dirs']) inklusive Unterverzeichnisse, benutzter ($data['size']) und belegter ($data['size']+$data['slack']) Speicherplatz.
                            PHP-Code:
                            function dir_size($dir$recurse=false$reset=true)
                            {
                              
                            // $dir gibt das Verzeichnis an
                              // $recurse: wenn true, dann Unterverzeichnisse mitzählen
                              // $reset: nur für internen Gebrauch
                              
                            static $data=array(), $cs 0;
                              if (
                            $reset)
                              {
                                
                            $data=array(
                                  
                            'dirs' => 0,
                                  
                            'files' => 0,
                                  
                            'size' => 0,
                                  
                            'slack' => 0
                                
                            );
                                
                            $cs cluster_size($dir);
                              }
                              
                            $dp opendir($dir);
                              if (
                            substr($dir,-1))!='/'$dir.='/';
                              while (
                            $fn readdir($dp))
                              {
                                if (
                            $is_dir($dir.$fn))
                                {
                                  
                            $data['dirs'] ++;
                                  if (
                            $recurse)
                                    
                            dir_size("$dir$fn/"truefalse);
                                }
                                else
                                {
                                  
                            $data['files'] ++;
                                  
                            $data['size'] += $fs filesize($dir.$fn)
                                  if (
                            $overhang $fs%$cs)
                                    
                            $data['slack'] += $cs $overhang;
                                }
                              }
                              
                            closedir($dp);
                              return 
                            $data;

                            mein Sport: mein Frühstück: meine Arbeit:

                            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                            Kommentar


                            • #15
                              Das ist doch mal ne feine Antwort, vielen dank Titus.

                              Das mit den Clustern hab ich natürlich nicht bedacht, aber du hast Recht. Muß ich wohl noch etwas umstricken.....werde auch mal die Performance deiner Funktion testen.
                              http://www.freehost-script.com

                              Werden Sie Webhoster, mit Werbung auf den Userseiten, Php, Mysql, FTP

                              Kommentar

                              Lädt...
                              X