PHP - Mehrere Verzeichnisse auslesen und Bilder zählen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

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

    Quellcode

    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. ?>
    Alles anzeigen


    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:

    Quellcode

    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. }
    Alles anzeigen
  • 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.

    Quellcode

    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.

    Quellcode

    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.

    Quellcode

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

    Quellcode

    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. ?>
    Alles anzeigen

    Danke an ALLE!