stefan: Dateien in Unterverzeichnissen einschließen

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);
?>

====================================================================

  1. 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

    1. 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

      1. 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

  2. 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