PHP - Mehrere Verzeichnisse auslesen und Bilder zählen

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • PHP - Mehrere Verzeichnisse auslesen und Bilder zählen

    Hallo zusammen,

    ich würde gerne mehrere Verzeichnisse auslesen und den Inhalt (Bilder) zählen.

    Aktueller Code:

    Source Code

    1. <?php
    2. $ordner = array('../images/finish/','../images/finish/parfum/','../images/finish/schachtel/','../images/finish/logo/');
    3. foreach ($ordner as $ordnere) {
    4. $handle = opendir($ordnere);
    5. while (false !== ($file = readdir($handle))) {
    6. if ($file != "." && $file != "..") {
    7. $sub = substr($file, -4);
    8. if ($sub == ".png" || $sub == ".jpg" || $sub == ".gif" || $sub == ".bmp") {
    9. $filecount = count(glob($ordnere.$file));
    10. echo $filecount;
    11. }
    12. }
    13. }
    14. }
    15. ?>
    Display All


    Bekomme aber nur die Ausgabe:
    11111111111111111111111111111111111111111111111111111111

  • Hi,
    du willst doch pro Ordner, die Anzahl an Bildern?
    Dann musst du ENTWEDER über die Dateien iterieren und die Dateiendungen prüfen ODER mit glob auf irgendein Pattern matchen (keine regulären Ausdrücke).
    Du machst beides und deswegen kommen natürlich nur 1er raus.

    Lösung:

    Source Code

    1. <?php
    2. function getNumberOfItemsForFolder($ordnere, $pattern) {
    3. $filecount = 0;
    4. $handle = opendir($ordnere);
    5. while (false !== ($file = readdir($handle))) {
    6. if (!$pattern || preg_match($pattern, $file)) {
    7. $filecount++;
    8. }
    9. }
    10. return $filecount;
    11. }
    12. $pattern = '/\.(png|jpg|gif|bmp)$/';
    13. $ordner = array('../images/finish/','../images/finish/parfum/','../images/finish/schachtel/','../images/finish/logo/');
    14. foreach ($ordner as $ordnere) {
    15. echo $ordnere. ":". getNumberOfItemsForFolder($ordnere, $pattern) . "\n";
    16. }
    Display All
  • Hi,

    möchtest du alle Einträge zusammenzählen, oder pro Order die Bilder zählen?

    Wenn du alle zusammenzählen möchtest, dann würde dir zu der Funktion scandir raten. Die Ergebnisarrays kannst du dann komplett mergen.

    Source Code

    1. $resultArray = array();
    2. $ordner = array('../images/finish/','../images/finish/parfum/','../images/finish/schachtel/','../images/finish/logo/');
    3. foreach ($ordner as $o) {
    4. $resultArray = array_merge($resultArray,scandir($o));
    5. }


    Schau dir das Array mittels var_dump einfach an. Nun brauchst du nurnoch einen Filter um deine gewünschte Eintrage herauszufiltern. Den Inhalt der Filterfunktion hast du ja schon richtig bei dir implementiert.

    Source Code

    1. $resultArray = array_filter($resultArray, function($file) {
    2. $sub = strtolower(substr($file, -4));
    3. if ($sub == ".png" || $sub == ".jpg" || $sub == ".gif" || $sub == ".bmp")
    4. return $file;
    5. });


    Am Ende brauchst du nur noch ein count auf dein Array setzen.

    Source Code

    1. echo count($resultArray);
  • Ich habe es nun endlich geschafft.
    Das Script tut nun das was es soll.

    Source Code

    1. <?php
    2. $folderImgCount=0;
    3. $ordner = array('../images/finish/','../images/finish/parfum/','../images/finish/schachtel/','../images/finish/logo/');
    4. foreach ($ordner as $ordnere) {
    5. $handle = opendir($ordnere);
    6. while (false !== ($file = readdir($handle))) {
    7. if ($file != "." && $file != "..") {
    8. $sub = end(explode('.',$file));
    9. if ($sub == "png" || $sub == "jpg" || $sub == "jpeg" || $sub == "gif" || $sub == "bmp") $folderImgCount++;
    10. }
    11. }
    12. closedir($handle);
    13. }
    14. echo 'Es wurden heute '.$folderImgCount.' Bilder erstellt';
    15. $folderImgCount=0;
    16. ?>
    Display All

    Danke an ALLE!