Dateien in Unterverzeichnissen einschließen
stefan
- php
Hallo,
benutze folgenden php-Code um zufällige JPGs eines definierten Verzeichnisses ($dir_real) anzeigen zu lassen.
Leider werden keine Dateien in den Unterverzeichnissen ausgegeben.
Habe schon versucht das Problem mit Hilfe des Forums und selfPHP zu lösen - leider vergebens :-(
Kann mir eventuell jemand den Code so hinbiegen bzw. helfen, dass alle Dateien - auch die in den Untervzeichnissen - mit eingebunden werden ($nim_pre)? Allerdings sollten Dateien in übergeordneten Verzeichnissen nicht angezeigt werden!
Danke schon jetzt,
Stefan
====================================================================
<?php
$dir_real = 'usr/123456/digicam/party01';
$dir_url = 'http://www.digicam-goe.de/party01';
$dir_thumbs = 'thumbs';
$i = 0;
$kat = opendir ($dir_real.'/'.$dir_thumbs);
while ($f = readdir($kat))
{ if ($f != '.' && $f != '..' && ereg(".jpg$",$f))
{$nimed[$i++] = $f;}
}
closedir ($kat);
srand((double)microtime()*1000000);
$nim_pre = $nimed[rand(0,sizeof($nimed)-1)];
$nimi = $dir_url.'/'.$dir_thumbs.'/'.$nim_pre;
$nimi_orig = $dir_url.'/'.$nim_pre;
$suurus = GetImageSize ($nimi);
?>
====================================================================
Hi,
also folgender Code liest alle Dateien des aktuellen Verzeichnisses aus, ohne "." und "..":
<?php
$handle=opendir('.');
while ($file = readdir ($handle)) {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
closedir($handle);
?>
Da Dein Verzeichnis $dir_real einen relativen Pfad angibt, geht die Funktion opendir() vom Arbeitsverzeichnis aus. Vielleicht solltest Du es mal mit einer absoluten Pfadangabe versuchen und zunächst mal dieses einfachere Skript verwenden.
Wenn das das funzt, kannst Du Dein Filter für .jpg-Dateien und andere Scherze einbauen.
Viele Grüße,
Achim
also folgender Code liest alle Dateien des aktuellen Verzeichnisses aus, ohne "." und "..":
Leider aber ohne die Unterverzeichnisse!!???
Genau das brauche ich aber!
<?php
$handle=opendir('.');
while ($file = readdir ($handle)) {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
closedir($handle);
?>
Da Dein Verzeichnis $dir_real einen relativen Pfad angibt, geht die Funktion opendir() vom Arbeitsverzeichnis aus. Vielleicht solltest Du es mal mit einer absoluten Pfadangabe versuchen und zunächst mal dieses einfachere Skript verwenden.
Wenn das das funzt, kannst Du Dein Filter für .jpg-Dateien und andere Scherze einbauen.
Viele Grüße,
Achim
Hi,
Leider aber ohne die Unterverzeichnisse!!???
Genau das brauche ich aber!
nimm zuerst mal dies: http://forum.de.selfhtml.org/faq/#Q-09a ...so!
Die Lösung heisst Rekursion. Du brauchst eine Funktion, die
den Inhalt des ihr übergebenen Verzeichnisses ausliest und sich
für jedes darin gefundene Verzeichnis selbst wieder aufruft.
Ich selbst habe kein solches Skript und werde dir auch keins
schreiben ;-) aber vielleicht findest Du unter http://www.dynamicwebpages.de/ etwas
passendes.
Viele Grüße,
Achim Schrepfer
Moin
Kann mir eventuell jemand den Code so hinbiegen bzw. helfen, dass alle Dateien - auch die in den Untervzeichnissen - mit eingebunden werden ($nim_pre)? Allerdings sollten Dateien in übergeordneten Verzeichnissen nicht angezeigt werden!
Im Archiv findet sich zumindest eine Lösung dazu: http://forum.de.selfhtml.org/archiv/2000_4/t23347.htm#a119573
Und wie Achim sagte brauchst du rekursive Funktionen (das iterativ zu lösen ist zwar auch möglich, aber das willst du nicht wirklich tun). Hier ein Ansatz in Pseudo-PHP
<?php
function rekursivLesen($hauptverzeichnis, $verzeichnis, &$dateien)
{
// Verzeichnis $hauptverzeichnis.$verzeichnis aufmachen
// In einer Schleife alle Verzeichnisinhalte durchgehen, ohne "." und ".."
// Mithilfe von is_dir() herausfinden, ob das aktuelle Dingsbum ein Verzeichnis ist
// Wenn ja, dann rekursivLesen($hauptverzeichnis, $verzeichnis.$aktuellerEintrag."/", $dateien) aufrufen
// Wenn nein, dann mit is_file() prüfen ob es eine Datei ist
// Wenn ja, dann schauen ob es eine Bilddatei ist
// Wenn ja, dann $verzeichnis.$aktuellerEintrag ins Array eintragen
}
$dateien = Array();
rekursivLesen("/dein/Anfangspfad/","", $dateien);
// In $dateien ist jetzt dein gewünschtes Array
?>
--
Henryk Plötz
Grüße aus Berlin