Dateien zählen mit Endung .jpg

Von: , Frage gestellt am Di, 10. Jul 2007

Hallo.

habe folgendes Problem:

Ich habe einen Ordner Bilder, dieser Ordner hat beliebig viele Unterordner. Jetzt möchte ich die Dateien mit Endung .jpg in dem Ordner Bilder + Unterordner zählen und die Gesamtgröße des Ordner Bilder ausgeben.

Habe schon viel gegoogelt, aber irgendwie funktionieren die ganzen Scripts nicht oder nur teilweise.

kann mir jemand weiterhelfen??

Grüße und danke im vorraus
Sebastian

12 Antworten zu dieser Frage

  1. Antwort von nach 2 Stunden 0 hilfreich
    so gehts...

    <?php 
    $handle=opendir('.'); 
    $counter = 0;
    $filesizecounter = 0;
    while ($file = readdir ($handle)) 
    	{ 
        $tmp = strrchr($file,".");
    	if ($tmp == ".jpg" || $tmp == ".jpeg")
    		{
    		$counter++;
    		$filesizecounter = $filesizecounter + filesize($file);
    		}
    	}
    closedir($handle); 
    
    echo "$counter Dateien im Ordner benötigen $filesizecounter Bytes speicherplatz";
    ?>
    


    hab sicherheitshalber mal die Dateiendung .jpEg auch mitgenommen... ;)

    • Antwort von nach 3 Stunden 0 hilfreich
      Re: so gehts...

      das is aber nur für einen ordner!
      für unterordner sollte man das vielleicht in eine funktion packen und rekursiv aufrufen!

      für die größe des ordners noch die frage:
      möchtest du die größe von allen dateien oder nur die größe alle .jpg/.jpeg zusammen?

      also vielleicht (nicht getestet) sowas:

      function jpgzaehlen($pfad)
      {
      $handle=opendir($pfad); 
      $counter = 0;
      $filesizecounter = 0;
      $rec;
      while ($file = readdir ($handle)) 
      	{ 
              if (is_dir($file))
              {
                   $plus=jpgzaehlen(realpath($file));
                   $counter+=$plus[0];
                   $filesizecounter+=$plus[1];
              }
              $tmp = strrchr($file,".");
      	if ($tmp == ".jpg" || $tmp == ".jpeg")
      		{
      		$counter++;
      		$filesizecounter = $filesizecounter + filesize($file);
      		}
      	}
      $rec[0]=$counter;
      $rec[1]=$filesizecounter;
      closedir($handle); 
      return $rec;
      }

      wobei ich gerade das nur ausm kopf mache und nicht weiss, ob man arrays so übergibt :)

      • Antwort von nach 3 Stunden 0 hilfreich
        Re^2: so gehts...

        vorab danke für deine antwort, werde es in der nächsten stunde ausprobieren, werde mich dann nochmals melden, ob es geklappt hat. für die größe des ordners noch die frage:
        möchtest du die größe von allen dateien oder nur die größe
        alle .jpg/.jpeg zusammen?
        nur die größe aller .jpg / .jpeg dateien, keine anderen dateien, wie z.b. .txt, .php !!

        grüße,
        sebastian

      • Antwort von nach 8 Stunden 0 hilfreich
        Re^2: so gehts...

        Hallo G.

        Dein Script bringt bei mir nie ein Ergebnis.

        Was ist da falsch?

        <?php

        function jpgzaehlen($pfad)
        {
        $handle=opendir('./bilder/');
        $counter = 0;
        $filesizecounter = 0;
        $rec;
        while ($file = readdir ($handle))
        {
        if (is_dir($file))
        {
        $plus=jpgzaehlen(realpath($file));
        $counter+=$plus[0];
        $filesizecounter+=$plus[1];
        }
        $tmp = strrchr($file,".");
        if ($tmp == ".jpg" || $tmp == ".jpeg" || $tmp == ".JPG" || $tmp == ".JPEG")
        {
        $counter++;
        $filesizecounter = $filesizecounter + filesize($file);
        }
        }
        $rec[0]=$counter;
        $rec[1]=$filesizecounter;
        closedir($handle);
        return $rec;
        }

        ?>

        bitte hilfe mir nochmals. danke!

        grüße,
        sebastian

        • Antwort von nach 9 Stunden 0 hilfreich
          Re^3: so gehts...

          Hallo G.

          Dein Script bringt bei mir nie ein Ergebnis.

          Was ist da falsch?
          hab ja geschrieben, dass das so ausm bauch raus is und nicht getestet ;) bitte hilfe mir nochmals. danke!
          hab grad wenig zeit, aber hab mal bei php.net geguckt. da schreiben se in den kommentaren öfters hilfreiche programme. hab auch was gefunden:

          <?php
          
          // Sample function to recursively return all files within a directory.
          // http://www.pgregg.com/projects/php/code/recursive_re...
          
          Function listdir($start_dir='.') {
          
            $files = array();
            if (is_dir($start_dir)) {
              $fh = opendir($start_dir);
              while (($file = readdir($fh)) !== false) {
                # loop through the files, skipping . and .., and recursing if necessary
                if (strcmp($file, '.')==0 || strcmp($file, '..')==0) continue;
                $filepath = $start_dir . '/' . $file;
                if ( is_dir($filepath) )
                  $files = array_merge($files, listdir($filepath));
                else
                  array_push($files, $filepath);
              }
              closedir($fh);
            } else {
              # false if the function was called with an invalid non-directory argument
              $files = false;
            }
          
            return $files;
          
          }
          
          $files = listdir('.');
          print_r($files);
          ?>

          das sollte man abändern können, wie man will. also z.b. nur dateien in das array schreiben, die .jpg sind (sofern das nicht sowieso alle seind). und ein count($files) ergibt dann die anzahl. müsst mer halt noch irgendwie die größe mitloggen... wobei man bei dieser lösung ja die dateipfade im array hat und dann mit einer while-schleife nochmal durchgehen kann und die dateigröße zusammenrechnet.
          wie gesagt grad wenig zeit. aber ein wenig mit php auseinandersetzen kann ja nicht schaden :) grüße,
          sebastian
          grüßle
          Geisterkarle

          • Antwort von nach einem Tag 0 hilfreich
            Re^4: so gehts...

            Hallo G.

            Danke für deine Antwort.

            Siehe Antwort-Artikel von Johnny, dass ist die Lösung, die ich brauchte.

            Danke euch allen für die Hilfe und wünsche einen schönen Tag.

            Grüße,
            Sebastian

    • Antwort von nach 4 Stunden 0 hilfreich
      Re: so gehts...

      Fast... So werden keine Unterordner erfasst, oder?
      ich würd es so machen:

      <?php
      function liste($dir, &$file_gesamt, &$counter)
      {					
      //Ordner und Unterordner durchsuchen
      if (is_dir($dir))
      { 
      if ($dh = opendir($dir))
      { 
      while ($file = readdir($dh))
      { 
      //einkommentieren, wenn man alle files aus dem Verzeichnis sehen möchte
      if (strtolower(strchr($file, ".")) == ".jpg" ||strtolower(strchr($file, ".")) == ".jpeg")
      { 	
      //.jp(e)g - Dateien behandeln
      echo $dir."/".$file."<br>\n";
      $counter++;
      $file_gesamt += filesize($dir."/".$file);
      }
      if($file != "." && $file != ".." && is_dir($file))
      {	
      liste($dir.$file, &$file_gesamt, &$counter);
      }
      
      }
      closedir($dh);
      }
      }
      }
      $counter=0;
      $file_gesamt=0;
      $dir="./";
      liste($dir, &$file_gesamt, &$counter);
      echo "Insgesamt $counter Dateien mit der Größe von $file_gesamt Bytes";
      ?>
      
      [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

      • Antwort von nach 8 Stunden 0 hilfreich
        Re^2: so gehts...

        Hallo Johnny.

        Ich hab wirklich keine Ahnung von PHP und bin erst am üben, aber dein Script zählt auch nur die Dateien die im untersten verzeichnis "bilder" sind.

        habe den code ein ganz kleines bisschen verändert.

        <?php
        function liste($dir, &$file_gesamt, &$counter)
        {		
        //Ordner und Unterordner durchsuchen
        if (is_dir($dir))
        { 
        if ($dh = opendir($dir))
        { 
        while ($file = readdir($dh))
        { 
        //einkommentieren, wenn man alle files aus dem Verzeichnis sehen möchte
        if (strtolower(strchr($file, ".")) == ".jpg" ||strtolower(strchr($file, ".")) == ".jpeg" || strtolower(strchr($file, ".")) == ".JPG")
        { 	
        //.jp(e)g - Dateien behandeln
        echo $dir."/".$file."<br>\n";
        $counter++;
        $file_gesamt += filesize($dir."/".$file);
        }
        if($file != "." && $file != ".." && is_dir($file))
        {	
        liste($dir.$file, &$file_gesamt, &$counter);
        }
        
        }
        closedir($dh);
        }
        }
        }
        $counter=0;
        $file_gesamt=0;
        $dir="./bilder";
        liste($dir, &$file_gesamt, &$counter);
        echo "Insgesamt $counter Dateien mit der Größe von $file_gesamt Bytes";
        ?>
        


        hab ich da bei der deklaration von $dir einen fehler gemacht?

        kannst du mir bitte nochmals helfen??

        gruß,
        sebastian

        • Antwort von nach 22 Stunden 0 hilfreich
          Re^3: so gehts...

          Es war noch ein kleiner Fehler drin... =)

          <?php
          function liste($dir, &$file_gesamt, &$counter)
          {
          //Ordner und Unterordner durchsuchen
          if (is_dir($dir))
          {
          if ($dh = opendir($dir))
          {
          while ($file = readdir($dh))
          {
          //einkommentieren, wenn man alle files aus dem Verzeichnis sehen möchte
          if (strtolower(strchr($file, ".")) == ".jpg" ||strtolower(strchr($file, ".")) == ".jpeg")
          {
          //.jp(e)g - Dateien behandeln
          //echo $dir."/".$file."<br>\n";
          $counter++;
          $file_gesamt += filesize($dir."/".$file);
          }
          if($file != "." && $file != ".." && is_dir($dir."/".$file))
          {
          echo "$dir$file lautet das Verzeichnis<br>";

          liste($dir."/".$file, &$file_gesamt, &$counter);
          }

          }
          closedir($dh);
          }
          }
          }
          $counter=0;
          $file_gesamt=0;
          $dir="C:/";
          clearstatcache();
          liste($dir, &$file_gesamt, &$counter);
          echo "Insgesamt $counter Dateien mit der Größe von $file_gesamt Bytes";
          ?>
          In $dir gibst du einfach jetzt das höchste Verzeichnis an. Sprich wenn du alle jpeg unter c:/windows haben willst, dann gibst du $dir="C:/windows"; an. Er durchsucht dann auch alle unterordner danach! [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!