bergmann: Dateien in einem Verzeichnis finden ?

Hallo,
ich habe folgendes Problem:
In einem Verzeichnis auf meiner Webspace werden durch ein Script
Bilddateien mit logischem Namensgebung erstellt.
D.h. das die Dateien immer nach dem Muster KATEGORIE_GALERIE_NUMMER.jpg benannt werden, z.B. "Auto_122_4344.jpg". Meine Frage, besser gesagt mein derzeitiges Problem ist, das ich nun ein PHP-Script benötige, was
a) Feststellt, ob Dateien vorhanden sind
b) Dateigruppen anhand der ID zusammenfast
Da ich aber nur die Werte für KATEGORIE und GALERIE habe, müsste die Suche jeweils alles finden, wo der Dateiname entsprechend beginnt.
Ein Beispiel:
Ich habe die Werte "Auto" (Kategorie) und "122" (Galerie) vorliegen, in dem Verzeichnis sind die Dateien:
Auto_112_4234.jpg
Auto_122_3234.jpg
Auto_122_3231.jpg
LKW_122_5343.jpg
Dann sollte das Script mir folgende Werte zurückliefern:
a) 2 Dateien vorhanden
b) Dateien: Auto_122_3234.jpg und Auto_122_3231.jpg
c) IDs: 3234 und 3231
Ich hoffe ich hab meine Frage jetzt nicht allzu unverständlich formuliert und hoffe das mir jemand helfen kann.
Gruss
K. Bergmann

  1. Hallo bergmann,

    Schau Dir im PHP-Manual mal readdir() an.

    Gruß,

    Dieter

    1. Hallo bergmann,

      Schau Dir im PHP-Manual mal readdir() an.

      Gruß,

      Dieter

      Hallo Dieter,

      ich habe natürlich im Manual schon nachgeschaut und auch gegoogelt :-) (und meine Frage glaub ich falsch geschrieben ;-), soll heissen, das mir das mit dem readdir() schon klar ist, ich weiß aber nicht wie ich die Ergebnisse entsprechend aufsplitten kann, da ich ja nur über die Namensbestandteile suchen und listen will.
      Das das über reguläre Ausdrücke gehen wird, ist mir auch klar - nur ich komm damit überhaupt nicht zurecht (in meinem Kopf schwirren nur noch Klammern, Punkte, Striche und Abkürzungen :-().

      Gruss
      Klaus

      1. Hallo Klaus,

        also fangen wir mal an mit dem readdir-Beispiel aus dem Manual

        if ($handle = opendir('/path/to/files')) {

        /* This is the correct way to loop over the directory. */
           while (false !== ($file = readdir($handle))) {
               echo "$file\n";
           }
           closedir($handle);
        }

        das haette ausgegeben:

        Auto_112_4234.jpg
        Auto_122_3234.jpg
        Auto_122_3231.jpg
        LKW_122_5343.jpg

        gesucht wir aber:
        a) 2 Dateien vorhanden
        b) Dateien: Auto_122_3234.jpg und Auto_122_3231.jpg
        c) IDs: 3234 und 3231

        Du musst also zaehlen und den dritten Teil des Namens rauskriegen. Dazu schiebst die Dateinamen in ein Array, sagen wir $dateien. Das sieht dann so aus:
        $dateien = array();
        $i = 0; //hier faengt der Zaehler an
        while (false !== ($file = readdir($handle)))
        {
          $file_arr = explode('_', substr($file, 0,-4));
          // substr($file, 0,-4) entspricht Auto_122_3234
          // $file_arr ist ein Array, das
          // $file_arr[0] = 'Auto'
          // $file_arr[1] = '122'
          // $file_arr[2] = '3234'
          // enthaelt. Jetzt packst du die relevanten Teile in $dateien
          $dateien[$i]['dateiname'] = $file; // also Auto_122_3234.jpg
          $dateien[$i]['id']        = $file_arr[2]; // also 3234
          $i++;//hier wird hochgezaehlt
        }
        Jetzt hast Du alles da, wo du es haben willst;
        Mach das mal soweit und schreibe darunter
        <pre>
        print count($dateien);// die Anzahl der Dateien
        print_r($dateien);    // der Inhalt des Arrays
        Jetzt kannst Du mit einem doppelten foreach deine daten weiterverarbeiten. Man haette die Verarbeitung natuerlich auch gleich in der while -Schleife machen koennen, aber so konnte ich besser demonstrieren, was an welcher Stelle passiert. Ich hab' das nicht weiter getetstet, rechne also mit eine parr Parse errors. Ach ja, und waehrend der Entwicklung immer error_reporting aud E_ALL lassen...

        Gruß,

        Dieter