Dateien in einem Verzeichnis finden ?
bergmann
- php
0 Dieter Raber0 bergmann
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
Hallo bergmann,
Schau Dir im PHP-Manual mal readdir() an.
Gruß,
Dieter
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
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