Homepage selbermachen 7.852 Themen, 35.619 Beiträge

PHP-Problem mit is_dir()

Rheinlaender / 6 Antworten / Baumansicht Nickles

Tach zusammen.

Ich habe ein kleines Problem mit einem PHP-Skript. Dieses liest alle Dateien (Bilder) in einem Ordner in ein Array ein und stellt die dazugehörigen Thumbnails, die sich in einem Unterordner befinden, auf einer Übersichtsseite dar. Alles funktioniert wunderbar, außer, dass eben der Unterordner auch als Dateiname einglesen wird und ein nicht vorhandenes Thumbnail dargestellt werden soll. So sieht der Codeschnipsel aus, der das eigentlich verhindern soll:


$namen = array();
while ($file = readdir ($handle)) {
if($file != "." && $file != "..") {
if(!is_dir ($file)) {
$zahl++;
$namen[$zahl] = $file;
}
}
}

Mit if(is_file ($file)) werden auch die Bilddateien nicht angezeigt. Kann mich bitte jemand mit der Nase auf den Fehler stoßen?

Gruß
Rheinlaender
bei Antwort benachrichtigen
xafford Rheinlaender „PHP-Problem mit is_dir()“
Optionen

Tja, der Fehler ist ganz einfach: Du fragst PHP, ob $file ein Verzeichnis ist und wenn es das nicht ist, dann speicherst Du $file. Allerdings erwartet PHP, dass Du is_dir einen absoluten Pfad zum potentiellen Ordner übergibst und nicht nur den Namen (es würde funktionieren, wenn Du in dem Verzeichnis operieren würdest, in dem auch das Script liegt). $file enthält aber nur den Namen der Datei / des Verzeichnisses, nicht jedoch den Pfad.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
xafford Nachtrag zu: „Tja, der Fehler ist ganz einfach: Du fragst PHP, ob file ein Verzeichnis ist und...“
Optionen

PS: Versuch es mal so...


$path = 'Pfad zum Ordner';

$namen = scandir ( $path );

if ( is_array ( $namen ) )
{

foreach ( $namen as $index => $name )
{

if ( is_dir ( $path . DIRECTORY_SEPARATOR . $name ) )
{

unset ( $namen[$index] );

}

}

}
Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Rheinlaender xafford „PS: Versuch es mal so... path Pfad zum Ordner namen scandir path if is_array...“
Optionen

Hallo xaff,

hab tausend Dank, Deine Lösung funktioniert perfekt. Wie Du wohl unschwer erkannt hast, stehe ich am Anfang meiner PHP-Bemühungen, deswegen war mir das mit der Pfadangabe nicht bewusst.
Dein Posting war sogar doppelt lohnend für mich, weil ich scandir noch nicht kannte. Meine 3 PHP-Bücher hab ich mir alle zu Zeiten von PHP 4 angeschafft. Wird wohl Zeit für was aktuelles...

Kurze Abschlussfrage: war in meinem Ausgangscode die Abfrage bezüglich "." und ".." nicht wegen der is_dir-Abfrage sowieso überflüssig?


Nochmal herzlichen Dank und Gruß
Rheinlaender

bei Antwort benachrichtigen
xafford Rheinlaender „Hallo xaff, hab tausend Dank, Deine Lösung funktioniert perfekt. Wie Du wohl...“
Optionen
Kurze Abschlussfrage: war in meinem Ausgangscode die Abfrage bezüglich "." und ".." nicht wegen der is_dir-Abfrage sowieso überflüssig?

Ja, war es. Die beiden "virtuellen" Einträge "." und ".." gelten als Verzeichnisse, wobei "." die Referenz auf das aktuelle Verzeichnis und ".." die Referenz auf das übergeordnete Verzeichnis darstellt.
Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Rheinlaender xafford „ Ja, war es. Die beiden virtuellen Einträge . und .. gelten als Verzeichnisse,...“
Optionen

Ja, das hatte ich mir schon gedacht.
"." und ".." sind mir bekannt. Da ich den Teil irgendwo in den Weiten des www abgeschrieben (und dann falsch angepasst, tststs...) hatte, war ich aber der Meinung, dass der Autor wohl genauer bescheid weiß als ich.

Danke nochmal.
Rheinlaender

bei Antwort benachrichtigen
xafford Rheinlaender „Ja, das hatte ich mir schon gedacht. . und .. sind mir bekannt. Da ich den Teil...“
Optionen

Naja, es schadet an sich nicht und kostet nur ein paar CPU-Zyklen, insofern macht sich wahrscheinlich selbst ein erfahrender Programmierer auch aus Gewohnheit wohl weniger Gedanken über solche Codezeilen wenn er den Code von irgendwo anderst übernimmt.

Btw: Wenn Du bisher nur Bücher über PHP4 hast, dann schau Dir mal "Inside PHP5" von Addison-Wesley an. Das ist zwar noch aus den Anfangszeiten von PHP5, zeigt aber ganz gut einige tiefergehende Unterschiede zu PHP4 auf, gerade in Hinsicht auf modulareren Code und ist von einem der Core-Entwickler von PHP. Wobei, so wie es derzeit aussieht, sich bald noch ein paar tiefergreifende Änderungen in PHP5 vollziehen dürften.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen