Dateien zählen mit Endung .jpg

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

so gehts…

<?php $handle=opendir('.'); <br />$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… :wink:

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 :smile:

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

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

<?php function liste($dir, &$file_gesamt, &$counter)<br />{ 
//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."
\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]

Wenn du dann anstatt Bytes die KB´s sehen willst, kannst du noch folgendes hinzufügen:

closedir($handle);
$sum = round(($filesizecounter) / 1024);
echo „$counter Dateien im Ordner benötigen $sum KB´s Speicherplatz“;

Kannst es natürlich auch in MB machen, wenn du willst :wink:

Viele Grüße
André

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo ihr.

vielen dank für die vielen antworten.

habe jetzt alle scripts ausprobiert. im mom. funktioniert noch keines, bin mar da nicht sicher, ob das sowieso nur auf nem webserver funzt, denn ich habe sie unter xampp ausprobiert. hier kommt immer 0 dateien mit 0 bytes, etc.

werde es, sobald ich zuhause bin, auf den webserver laden, melde mich dann wieder bei euch.

bis jetzt, an ganz großes dankeschön…

grüße,
sebastian

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)<br />{ 
//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."
\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

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

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 :wink:

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.<br />// http://www.pgregg.com/projects/php/code/recursive\_readdir.phps

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 :smile:

grüße,
sebastian

grüßle
Geisterkarle

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." \n"; $counter++; $file\_gesamt += filesize($dir."/".$file); } if($file != "." && $file != ".." && is\_dir($dir."/".$file)) { echo "$dir$file lautet das Verzeichnis "; 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]

Hallo Johnny.

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." \n"; $counter++; $file\_gesamt += filesize($dir."/".$file); } if($file != "." && $file != ".." && is\_dir($dir."/".$file)) { echo "$dir$file lautet das Verzeichnis "; 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!

Schön habs gerade ausprobiert und es hat geklappt. Zählt genau, dass was ich will und gibt noch dazu die größe aller jp(e)g dateien aus.

vielen lieben dank.

Grüße,
Sebastian

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