Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Ich möchte gerne meine Verzeichniss auslesen, was klappt, abe rnun möchte
ich gerne das nur bestimmte Dateien angezeigt werden.
zB. nur Dateien mit Endung .txt oder .php. Aber ich finde nicht wie man das
macht. Füt etwas Hilfe wäre ich dankbar

Michael

<?php
$pfad = '.';
if($verzeichniszeiger = opendir($pfad))
{
while($datei = readdir($verzeichniszeiger))
{
if ($datei != '.' && $datei != '..')
{
if(is_dir($datei))
{
echo'Ordner->'.$datei.'<br>';
}

else

{
echo'Datei->'. $datei.'<br>';
}
}
}

closedir($verzeichniszeiger);
}

?>
Michael Tomala [ Fr, 09 November 2007 11:33 ] [ ID #1866928 ]

Re: Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Michael Tomala schrieb:
> Ich möchte gerne meine Verzeichniss auslesen, was klappt, abe rnun möchte
> ich gerne das nur bestimmte Dateien angezeigt werden.
> zB. nur Dateien mit Endung .txt oder .php.

fnmatch() ist dein Freund. Vielleicht auch glob().

Gruß,
Torsten
thorny [ Fr, 09 November 2007 11:36 ] [ ID #1866929 ]

fnmatch (Was: Verzeichniss auslesen, nur bestimmte Dateien anzeigen)

Torsten Zühlsdorff schrieb:
> Michael Tomala schrieb:
>> Ich möchte gerne meine Verzeichniss auslesen, was klappt, abe rnun möchte
>> ich gerne das nur bestimmte Dateien angezeigt werden.
>> zB. nur Dateien mit Endung .txt oder .php.
>
> fnmatch() ist dein Freund. Vielleicht auch glob().

Gibt es einen Grund (mal abgesehen von dem im manual genannten
"_Benutzer_ könnten daran gewöhnt sein") fnmatch zu benutzen und nicht
z.B. preg_match?
Ich sehe hier nur ein Portierungsproblem.

regards,
Jens
Jens Himmelrath [ Fr, 09 November 2007 11:48 ] [ ID #1866933 ]

Re: Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Michael Tomala schrieb:

> Ich möchte gerne meine Verzeichniss auslesen, was klappt, abe rnun möchte
> ich gerne das nur bestimmte Dateien angezeigt werden.
> zB. nur Dateien mit Endung .txt oder .php. Aber ich finde nicht wie man das
> macht. Füt etwas Hilfe wäre ich dankbar

Zum Beispiel so:

$suffix = substr($dateiname, -4);
if ($suffix == '.txt' || $suffix = '.php') ...

Oder so:

if (in_array(substr($dateiname, -4), array('.txt', '.php'))) ...

Letzteres lässt sich einfacher erweitern.

Gruß. Claus
Claus Reibenstein [ Fr, 09 November 2007 11:48 ] [ ID #1866934 ]

Re: fnmatch (Was: Verzeichniss auslesen, nur bestimmte Dateien anzeigen)

if(preg_match('=jpg=', $datei)) { echo $datei.'<br>';}

ich denke so geht es

"Jens Himmelrath" <muelleimer [at] zhayad.de> schrieb im Newsbeitrag
news:5pis81Fraoj3U1 [at] mid.dfncis.de...
Torsten Zühlsdorff schrieb:
> Michael Tomala schrieb:
>> Ich möchte gerne meine Verzeichniss auslesen, was klappt, abe rnun möchte
>> ich gerne das nur bestimmte Dateien angezeigt werden.
>> zB. nur Dateien mit Endung .txt oder .php.
>
> fnmatch() ist dein Freund. Vielleicht auch glob().

Gibt es einen Grund (mal abgesehen von dem im manual genannten
"_Benutzer_ könnten daran gewöhnt sein") fnmatch zu benutzen und nicht
z.B. preg_match?
Ich sehe hier nur ein Portierungsproblem.

regards,
Jens
Michael Tomala [ Fr, 09 November 2007 12:00 ] [ ID #1866937 ]

Re: fnmatch (Was: Verzeichniss auslesen, nur bestimmte Dateien anzeigen)

Hallo Michael,

bitte passe deinen Zitierstil an, im Usenet macht man das anders.

Michael Tomala schrieb:
> "Jens Himmelrath" <muelleimer [at] zhayad.de> schrieb:
> Torsten Zühlsdorff schrieb:
>>> Michael Tomala schrieb:
>>>> Ich möchte gerne meine Verzeichniss auslesen, was klappt, abe rnun möchte
>>>> ich gerne das nur bestimmte Dateien angezeigt werden.
>>>> zB. nur Dateien mit Endung .txt oder .php.
>>> fnmatch() ist dein Freund. Vielleicht auch glob().
>>
>> Gibt es einen Grund (mal abgesehen von dem im manual genannten
>> "_Benutzer_ könnten daran gewöhnt sein") fnmatch zu benutzen und nicht
>> z.B. preg_match?
>
> if(preg_match('=jpg=', $datei)) { echo $datei.'<br>';}
>
> ich denke so geht es

Ichbinkeinjpg.zip
tollesbild.JPG
tollesbild.jpeg
tollesbild.Jpg


Wenn ich mich nicht irre funktionieren alle die nicht.

regards,
Jens
Jens Himmelrath [ Fr, 09 November 2007 12:05 ] [ ID #1866938 ]

Re: fnmatch (Was: Verzeichniss auslesen, nur bestimmte Dateien anzeigen)

Du hast recht, jetzt mache ich es so, was aber zum Haare raufen ist, es
funktioniert, aber die Ordner werden nicht mehr angezeigt?


<?php
$pfad = '../daten/images/'; // start

if($verzeichniszeiger = opendir($pfad))
{
while($datei = readdir($verzeichniszeiger))
{
if ($datei != '.' && $datei != '..')
{
if(is_dir($datei))
{
echo'Ordner->'.$datei.'<br>';
}

else

{
$endnung = substr($datei, -4);
if ($endnung=='.jpg'){ echo $datei.'<br>';}
}
}
}

closedir($verzeichniszeiger);
}

?>


"Jens Himmelrath" <muelleimer [at] zhayad.de> schrieb im Newsbeitrag
news:5pit6sFqoml6U1 [at] mid.dfncis.de...
Hallo Michael,

bitte passe deinen Zitierstil an, im Usenet macht man das anders.

Michael Tomala schrieb:
> "Jens Himmelrath" <muelleimer [at] zhayad.de> schrieb:
> Torsten Zühlsdorff schrieb:
>>> Michael Tomala schrieb:
>>>> Ich möchte gerne meine Verzeichniss auslesen, was klappt, abe rnun
>>>> möchte
>>>> ich gerne das nur bestimmte Dateien angezeigt werden.
>>>> zB. nur Dateien mit Endung .txt oder .php.
>>> fnmatch() ist dein Freund. Vielleicht auch glob().
>>
>> Gibt es einen Grund (mal abgesehen von dem im manual genannten
>> "_Benutzer_ könnten daran gewöhnt sein") fnmatch zu benutzen und nicht
>> z.B. preg_match?
>
> if(preg_match('=jpg=', $datei)) { echo $datei.'<br>';}
>
> ich denke so geht es

Ichbinkeinjpg.zip
tollesbild.JPG
tollesbild.jpeg
tollesbild.Jpg


Wenn ich mich nicht irre funktionieren alle die nicht.

regards,
Jens
Michael Tomala [ Fr, 09 November 2007 12:18 ] [ ID #1866939 ]

Re: Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Claus Reibenstein schrieb:
> Michael Tomala schrieb:
>
>> Ich möchte gerne meine Verzeichniss auslesen, was klappt, abe rnun möchte
>> ich gerne das nur bestimmte Dateien angezeigt werden.
>> zB. nur Dateien mit Endung .txt oder .php. Aber ich finde nicht wie man das
>> macht. Füt etwas Hilfe wäre ich dankbar
>
> Zum Beispiel so:
>
> $suffix = substr($dateiname, -4);
> if ($suffix == '.txt' || $suffix = '.php') ...
>
> Oder so:
>
> if (in_array(substr($dateiname, -4), array('.txt', '.php'))) ...

Hat aber alles den Nachteil, dass Endungen wie z.b. ".b", ".b8",
".dylib" oder gar ".disabled" nicht behandelbar sind.

Gruß,
Torsten
thorny [ Fr, 09 November 2007 13:01 ] [ ID #1866943 ]

Re: Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Torsten Zühlsdorff schrieb:

> Claus Reibenstein schrieb:
>
>> Zum Beispiel so:
>>
>> $suffix = substr($dateiname, -4);
>> if ($suffix == '.txt' || $suffix = '.php') ...
>>
>> Oder so:
>>
>> if (in_array(substr($dateiname, -4), array('.txt', '.php'))) ...
>
> Hat aber alles den Nachteil, dass Endungen wie z.b. ".b", ".b8",
> ".dylib" oder gar ".disabled" nicht behandelbar sind.

$found = false;
foreach (array('.b', '.b8', '.dylib', '.disabled') as $suffix) {
$found = substr($dateiname, -strlen($suffix)) == $suffix;
if ($found)
break;
}
if ($found) ...

Gruß. Claus
Claus Reibenstein [ Fr, 09 November 2007 13:06 ] [ ID #1866945 ]

Re: fnmatch (Was: Verzeichniss auslesen, nur bestimmte Dateien anzeigen)

Michael Tomala schrieb:

> Du hast recht, jetzt mache ich es so, was aber zum Haare raufen ist, es
> funktioniert, aber die Ordner werden nicht mehr angezeigt?
>
>
> <?php
> $pfad = '../daten/images/'; // start
>
> if($verzeichniszeiger = opendir($pfad))
> {
> while($datei = readdir($verzeichniszeiger))
> {
> if ($datei != '.' && $datei != '..')
> {
> if(is_dir($datei))
> {
> echo'Ordner->'.$datei.'<br>';
> }
>
> else
>
> {
> $endnung = substr($datei, -4);
> if ($endnung=='.jpg'){ echo $datei.'<br>';}
> }
> }
> }
>
> closedir($verzeichniszeiger);
> }
>
> ?>
>
>
> "Jens Himmelrath" <muelleimer [at] zhayad.de> schrieb im Newsbeitrag
> news:5pit6sFqoml6U1 [at] mid.dfncis.de...
> Hallo Michael,
>
> bitte passe deinen Zitierstil an, im Usenet macht man das anders.
>
> Michael Tomala schrieb:
> > "Jens Himmelrath" <muelleimer [at] zhayad.de> schrieb:
> > Torsten Zühlsdorff schrieb:
> > > > Michael Tomala schrieb:
> > > > > Ich möchte gerne meine Verzeichniss auslesen, was klappt,
> > > > > abe rnun möchte
> > > > > ich gerne das nur bestimmte Dateien angezeigt werden.
> > > > > zB. nur Dateien mit Endung .txt oder .php.
> > > > fnmatch() ist dein Freund. Vielleicht auch glob().
> > >
> > > Gibt es einen Grund (mal abgesehen von dem im manual genannten
> > > "_Benutzer_ könnten daran gewöhnt sein") fnmatch zu benutzen und nicht
> > > z.B. preg_match?
> >
> > if(preg_match('=jpg=', $datei)) { echo $datei.'<br>';}
> >
> > ich denke so geht es
>
> Ichbinkeinjpg.zip
> tollesbild.JPG
> tollesbild.jpeg
> tollesbild.Jpg
>
>
> Wenn ich mich nicht irre funktionieren alle die nicht.
>
> regards,
> Jens
>
>
Carsten Wiedmann [ Fr, 09 November 2007 13:09 ] [ ID #1866946 ]

Re: Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Torsten Zühlsdorff schrieb:
> Claus Reibenstein schrieb:
>> Michael Tomala schrieb:
>>
>>> Ich möchte gerne meine Verzeichniss auslesen, was klappt, abe rnun möchte
>>> ich gerne das nur bestimmte Dateien angezeigt werden.
>>> zB. nur Dateien mit Endung .txt oder .php. Aber ich finde nicht wie man das
>>> macht. Füt etwas Hilfe wäre ich dankbar
>> Zum Beispiel so:
>>
>> $suffix = substr($dateiname, -4);
>> if ($suffix == '.txt' || $suffix = '.php') ...
>>
>> Oder so:
>>
>> if (in_array(substr($dateiname, -4), array('.txt', '.php'))) ...
>
> Hat aber alles den Nachteil, dass Endungen wie z.b. ".b", ".b8",
> ".dylib" oder gar ".disabled" nicht behandelbar sind.

if (in_array(strrchr($dateiname, '.'), array('.jpeg', '.jpg')) ...

oder sonstige andere Variante

Viele Grüße
Christoph
Christoph Bersch [ Fr, 09 November 2007 13:15 ] [ ID #1866948 ]

Re: fnmatch (Was: Verzeichniss auslesen, nur bestimmte Dateien anzeigen)

Michael Tomala schrieb:

> > > > > ich gerne das nur bestimmte Dateien angezeigt werden.
> > > > > zB. nur Dateien mit Endung .txt oder .php.
>
> $endnung = substr($datei, -4);
> if ($endnung=='.jpg'){ echo $datei.'<br>';}

Das würde ich eher so machen:
| if ('jpg' == pathinfo($datei, PATHINFO_EXTENSION)) {
| echo $datei.'<br>';
| }

Das lässt sich ja dann noch mit dem in_array() Ansatz aus der anderen
Antwort kombinieren.

Gruß
Carsten
Carsten Wiedmann [ Fr, 09 November 2007 13:14 ] [ ID #1866949 ]

Re: Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Claus Reibenstein schrieb:

>>> Zum Beispiel so:
>>>
>>> $suffix = substr($dateiname, -4);
>>> if ($suffix == '.txt' || $suffix = '.php') ...
>>>
>>> Oder so:
>>>
>>> if (in_array(substr($dateiname, -4), array('.txt', '.php'))) ...
>> Hat aber alles den Nachteil, dass Endungen wie z.b. ".b", ".b8",
>> ".dylib" oder gar ".disabled" nicht behandelbar sind.
>
> $found = false;
> foreach (array('.b', '.b8', '.dylib', '.disabled') as $suffix) {
> $found = substr($dateiname, -strlen($suffix)) == $suffix;
> if ($found)
> break;
> }
> if ($found) ...

Es ist immer wieder faszinierend mit anzusehen, dass Programmierer
Probleme in Code statt in Worten lösen. :P

Außerdem wird der Spezialfall "keine Endung" übersehen. Der wäre in
deinem Lösungsvorschlag immer korrekt, oder?
Und was ist mit korrekten Endungen, deren Buchstaben nicht der Groß- und
Kleinschreibung des Gesuchten entsprechen?

Gruß,
Torsten
thorny [ Fr, 09 November 2007 13:40 ] [ ID #1866951 ]

Re: Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Christoph Bersch schrieb:

>>>> Ich möchte gerne meine Verzeichniss auslesen, was klappt, abe rnun
>>>> möchte ich gerne das nur bestimmte Dateien angezeigt werden.
>>>> zB. nur Dateien mit Endung .txt oder .php. Aber ich finde nicht wie
>>>> man das macht. Füt etwas Hilfe wäre ich dankbar
>>> Zum Beispiel so:
>>>
>>> $suffix = substr($dateiname, -4);
>>> if ($suffix == '.txt' || $suffix = '.php') ...
>>>
>>> Oder so:
>>>
>>> if (in_array(substr($dateiname, -4), array('.txt', '.php'))) ...
>>
>> Hat aber alles den Nachteil, dass Endungen wie z.b. ".b", ".b8",
>> ".dylib" oder gar ".disabled" nicht behandelbar sind.
>
> if (in_array(strrchr($dateiname, '.'), array('.jpeg', '.jpg')) ...
>
> oder sonstige andere Variante

Auch du gehst hier davon aus, dass die Dateiendung durch einen "." vom
Dateinamen getrennt ist. Was ist, wenn der Fall "keine Endung" verlangt
wird? ;)

Gruß,
Torsten
thorny [ Fr, 09 November 2007 13:41 ] [ ID #1866952 ]

Re: Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Torsten Zühlsdorff schrieb:

> Claus Reibenstein schrieb:
>
>> $found = false;
>> foreach (array('.b', '.b8', '.dylib', '.disabled') as $suffix) {
>> $found = substr($dateiname, -strlen($suffix)) == $suffix;
>> if ($found)
>> break;
>> }
>> if ($found) ...
>
> Es ist immer wieder faszinierend mit anzusehen, dass Programmierer
> Probleme in Code statt in Worten lösen. :P

<?php echo "Weil's einfacher ist ;-)\n"; ?>

> Außerdem wird der Spezialfall "keine Endung" übersehen. Der wäre in
> deinem Lösungsvorschlag immer korrekt, oder?

Nein, der wäre immer falsch, weil substr(0) den kompletten String
liefert, der niemals gleich einem Leerstring ist. Dieser Fall müsste
also gesondert behandelt werden.

> Und was ist mit korrekten Endungen, deren Buchstaben nicht der Groß- und
> Kleinschreibung des Gesuchten entsprechen?

Auch hierfür gibt es eine simple Lösung: Alles in klein (oder groß, je
nach Belieben) umwandeln und dann vergleichen.

Wobei aber erst einmal die Frage zu klären wäre, ob diese _wirklich_
korrekt sind. Linux-Systeme z.B. unterscheiden zwischen Groß- und
Kleinschreibung. Dort sind blah.c und bla.C zwei verschiedene Dateien
mit unterschiedlichen Endungen.

Gruß. Claus
Claus Reibenstein [ Fr, 09 November 2007 13:54 ] [ ID #1866953 ]

Re: Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Claus Reibenstein schrieb:
> Torsten Zühlsdorff schrieb:
>
>> Claus Reibenstein schrieb:
>>
>>> $found = false;
>>> foreach (array('.b', '.b8', '.dylib', '.disabled') as $suffix) {
>>> $found = substr($dateiname, -strlen($suffix)) == $suffix;
>>> if ($found)
>>> break;
>>> }
>>> if ($found) ...
>> Es ist immer wieder faszinierend mit anzusehen, dass Programmierer
>> Probleme in Code statt in Worten lösen. :P
>
> <?php echo "Weil's einfacher ist ;-)\n"; ?>

Also ich präferiere die Deutsche Syntax. Jedem das Seine ;)

>> Außerdem wird der Spezialfall "keine Endung" übersehen. Der wäre in
>> deinem Lösungsvorschlag immer korrekt, oder?
>
> Nein, der wäre immer falsch, weil substr(0) den kompletten String
> liefert, der niemals gleich einem Leerstring ist. Dieser Fall müsste
> also gesondert behandelt werden.

Achso - Ergebnis falsch erwartet, aber eben diese Sonderbehandlung war
meine Intention :P

>> Und was ist mit korrekten Endungen, deren Buchstaben nicht der Groß- und
>> Kleinschreibung des Gesuchten entsprechen?
>
> Auch hierfür gibt es eine simple Lösung: Alles in klein (oder groß, je
> nach Belieben) umwandeln und dann vergleichen.

Nö. Ein stripos wäre besser. Denn nicht jeder Großbuchstabe, den man
klein macht, ist das selbe in Klein. Ich verweise da mal auf das
türkische "I"

> Wobei aber erst einmal die Frage zu klären wäre, ob diese _wirklich_
> korrekt sind. Linux-Systeme z.B. unterscheiden zwischen Groß- und
> Kleinschreibung. Dort sind blah.c und bla.C zwei verschiedene Dateien
> mit unterschiedlichen Endungen.

Na gut, den Einwand lasse ich gelten ;)

Gruß,
Torsten
thorny [ Fr, 09 November 2007 14:01 ] [ ID #1866954 ]

Re: Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Torsten Zühlsdorff schrieb:
> Christoph Bersch schrieb:
>
>>>>> Ich möchte gerne meine Verzeichniss auslesen, was klappt, abe rnun
>>>>> möchte ich gerne das nur bestimmte Dateien angezeigt werden.
>>>>> zB. nur Dateien mit Endung .txt oder .php. Aber ich finde nicht wie
>>>>> man das macht. Füt etwas Hilfe wäre ich dankbar
>>>> Zum Beispiel so:
>>>>
>>>> $suffix = substr($dateiname, -4);
>>>> if ($suffix == '.txt' || $suffix = '.php') ...
>>>>
>>>> Oder so:
>>>>
>>>> if (in_array(substr($dateiname, -4), array('.txt', '.php'))) ...
>>> Hat aber alles den Nachteil, dass Endungen wie z.b. ".b", ".b8",
>>> ".dylib" oder gar ".disabled" nicht behandelbar sind.
>> if (in_array(strrchr($dateiname, '.'), array('.jpeg', '.jpg')) ...
>>
>> oder sonstige andere Variante
>
> Auch du gehst hier davon aus, dass die Dateiendung durch einen "." vom
> Dateinamen getrennt ist. Was ist, wenn der Fall "keine Endung" verlangt
> wird? ;)

Ich war davon ausgegangen, dass es für den vom OP angegebenen Fall
Endungen gibt und nicht auch noch so Sachen wie keine Endung oder sowas
wie '.php.bak'. Bei letzterer Variante funktioniert übrigens auch
pathinfo nicht.
Aber es zeigt eine alternative Möglichkeit wie es mit anderen
Stringfunktionen für _einfache_ Endungen gehen könnte.

Kannst auch sowas wie

if(strpos(strrev($datei), strrev($endung)) === 0)

(optional mit array() und foreach erweitern) nehmen und, falls
vorhanden, noch die gewünschten Sonderfälle behandeln :P
Zumindest sollte inzwischen schon eine Variante dasein, die der OP
gebrauchen kann :-)

Frohes Schaffen
Christoph
Christoph Bersch [ Fr, 09 November 2007 16:53 ] [ ID #1866967 ]
PHP » de.comp.lang.php.misc » Verzeichniss auslesen, nur bestimmte Dateien anzeigen

Vorheriges Thema: Leerzeichen in Form-Feldnamen
Nächstes Thema: session_id()