Ankündigung

Einklappen
Keine Ankündigung bisher.

jpg Dateien in einem Ordner und dessen Unterordner zählen

Einklappen

Neue Werbung 2019

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

  • jpg Dateien in einem Ordner und dessen Unterordner zählen

    Hallo,

    ich würde gerne jpg-Dateien nicht nur in einem Verzeichnis (z.B. "webalben") auslesen/zählen, sondern auch alle jpg-Dateien (und evtl. Ordner) in den Unterverzeichnissen von "webalben" zählen.
    Um die Dateien in einem Verzeichnis zu zählen, habe ich folgendes Skript (welches auch funktioniert):

    PHP-Code:
    <?php
    function count_in_dir($where)
    {
    $cnt = Array('files' => 0,'ordner' => 0);
    if($dh = opendir($where)) {
    while(($file = readdir($dh)) !== false) {
    if(preg_match('/^\.+$/', $file)) ; # . / ..
    elseif(is_dir("$where/$file")) $cnt['ordner']++; # directory
    else $cnt['files']++; # file
    }
    closedir($dh);
    }
    return $cnt;
    }
    ?>


    Hab in Foren (404 Not Found...) gelesen, dass es mit rekursiver Programmierung funktioniert. Hab das skript von oben übernommen (teils geändert) und die Funktion "get_dir" hinzugefügt.
    Hier der PHP Code
    (index_count_all_files.php):

    PHP-Code:
    <?php
    function get_dir($dir)
    {
    $cnt = Array('files' => 0,'ordner' => 0);
    if($fp = opendir($dir)) {
    while(($datei = readdir($fp)) !== false) {
    if(preg_match('/^\.+$/', $file)) ; # . / ..
    elseif (is_dir("$dir/$datei")) $cnt['ordner']++; # directory
    else $cnt['files']++; # file
    { get_dir("$dir/$datei"); }
    }
    closedir($fp);
    }
    return $cnt;
    }
    ?>


    Der Code-Einbau in index_xyz.php sieht so aus:

    PHP-Code:
    <?php
    include 'scripts/php/index_count_all_files.php';
    $ordner = 'web-alben';
    $anzahl = get_dir($ordner);
    echo " {$anzahl['files']} Bilder und "
    . "{$anzahl['ordner']} Unterverzeichnisse im Ordner: $ordner";
    ?>


    Ich erhalte folgende Fehlermeldung auf der HP:

    Parse error: syntax error, unexpected T_ELSE in /usr/export/www/vhosts/funnetwork/hosting/floli1privat/scripts/php/index_count_all_files.php on line 10

    Ich bin mir sicher, dass ich den Befehl
    get_dir("$dir/$datei");
    nicht an richtiger Stelle eingefügt habe. MÖglicherweise fehlt auch noch etwas!
    Ich bin alles andere als ein Profi bei PHP oder was andere Progrommiersprachen betrifft. Ich bitte dies bei Euren Antworten zu berücksichtigen.
    Hier komm ich leider nicht weiter.
    Wer kann mir helfen?

    Vielen Dank im Voraus.

    Viele Grüße,
    Flo
    (ccolucci)

  • #2
    Beim Posten bitte [php] bbTags statt eigener Formatierung verwenden.

    Beispielcodes für ein ähnliches Problem findest Du im Wiki.

    Kommentar


    • #3
      Hallo nikosch,

      vielen Dank für deine schnelle ANtwort.

      Im Wiki hab ich nur "verzeichnisse auslesen" entdeckt. Unterverzeichnisse auslesen ist zwar auch dabei, aber dies hilft mir leider nicht weiter, da ich die Dateien (möglichst nur .jpg) ja zählen will.
      Da ich anfänger bin, weiß ich auch nicht, wie ich das umschreiben müsste..
      Könntest du mir da helfen?
      Grüße,
      ccolucci

      Kommentar


      • #4
        Im Prinzip nicht so schwer.
        - if ('.' == $file || '..' == $file) macht dasselbe, wie Deine preg_match Zeile oben. Nur performanter
        - In den Block // Ausschluss von Verzeichnisnamen vor continue; käme der Zähler für Verzeichnisse
        - Dort, wo $file verarbeitet wird, käme Dein Datei-Counter
        - um bestimmte Dateinamen zuzulassen/auszuschließen käme ein ähnlicher Mechanismus wie der zum Einsatz, der . und .. ausschließt. Dazu mußt Du $file auswerten nach bestimmten Dateiendungen, z.B. mit Stringfunktionen

        Kommentar


        • #5
          http://www.php.de/php-einsteiger/476...tml#post368300

          Kommentar


          • #6
            Du hast wieder nicht gelesen Jego!

            Kommentar


            • #7
              @nikosch: mir ist schon klar, das das damit nicht alles geht. Aber dort stecken unteranderem die ansätze zur Problemlösung drin.

              Kommentar


              • #8
                Zitat von nikosch Beitrag anzeigen
                Im Prinzip nicht so schwer.
                - In den Block // Ausschluss von Verzeichnisnamen vor continue; käme der Zähler für Verzeichnisse
                - Dort, wo $file verarbeitet wird, käme Dein Datei-Counter
                Stringfunktionen

                In meinem php skript befindet sich kein "continue". Wie muss der Zähler aussehen?
                Wo ist die Stelle genau , an der $file verarbeitet wird?

                Kannst du /jemand evtl meinen COde auch einfach ergänzen oder abändern, sodass er funktioniert?

                Kommentar


                • #9
                  Ich bezog mich auf das Beispiel aus dem Wiki. Dein obiges Script finde ich umständlich und unübersichtlich.

                  Kommentar

                  Lädt...
                  X