Kati: Anzahl Dateien in Ordner ausgeben

Hallo mit'nander!

Ich will aus einem Ordner die Anzahl Dateien auslesen:

$path="../example/";
$index=0;
$handle = opendir($path);
    //Dateien aus Ordner in Array $file speichern
    while($file = readdir($handle))
      {
           $files[] = $file;
           $index++;

}

echo $index;

Aber irgendwie wird mir immer nur 0 ausgegeben.
Was mache ich falsch?

Danke schonmal im Vorraus

  1. Hello,

    Ich will aus einem Ordner die Anzahl Dateien auslesen:

    $path="../example/";
    $index=0;
    $handle = opendir($path);
        //Dateien aus Ordner in Array $file speichern
        while($file = readdir($handle))
          {

    echo $file;   ### gibt Dir Auskunft über Deinen einen Denkfehler

    $files[] = $file;
               $index++;

    }

    echo $index;

    Aber irgendwie wird mir immer nur 0 ausgegeben.
    Was mache ich falsch?

    Du versuchst Dateien zu sammeln, wo keine sind.

    Der andere Fehler ist in der while-Bedingung

    Wenn eine Datei des Namens '0' kommt, was nicht verboten ist unter Linux, dann ist die Schliefe zuende.

    Du musst also fragen nach

    (while (false !== ($file = readdir($diehandle)))
       {
         ## es gibt eine Datei im Verzeichnis
         ## mit dem Namen $file, aber in welchem Pfad
         ## liegt die?
       }

    Und schau Dir auch mal glob() an

    http://de2.php.net/manual/de/function.glob.php

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Du versuchst Dateien zu sammeln, wo keine sind.

      Der andere Fehler ist in der while-Bedingung

      Wenn eine Datei des Namens '0' kommt, was nicht verboten ist unter Linux, dann ist die Schliefe zuende.

      Du musst also fragen nach

      (while (false !== ($file = readdir($diehandle)))
         {
           ## es gibt eine Datei im Verzeichnis
           ## mit dem Namen $file, aber in welchem Pfad
           ## liegt die?
         }

      »»

      Danke! Ist ja eigentlich logisch ;)
      öhm, wo soll ich jetzt aber Den Pfad an den Dateinamen anhängen?

      nach dem öffnen des Ordners in einer Schleife?

      (while (false !== ($path.$file = readdir($handle))
      {                   oder HIER?

      }

      Und schau Dir auch mal glob() an

      http://de2.php.net/manual/de/function.glob.php

      machich mal, danke

      1. Hello,

        $dirhandle = opendir($path);

        (while (false !== ($file = readdir($dirhandle)))
           {

        $foundfile = rtrim($path,'/').'/'.$file;   ### [1]
                  if is_file($foundfile)
                  {
                    $_directory[] = $foundfile;
                  }
          >    }

        echo "Anzahl = ".count($_directory);

        [1] sonst hast Du auch die Links, die Directories und die beiden "Spezialeinträge" . und .. mit drin

        Danke! Ist ja eigentlich logisch ;)
        öhm, wo soll ich jetzt aber Den Pfad an den Dateinamen anhängen?

        nach dem öffnen des Ordners in einer Schleife?

        (while (false !== ($path.$file = readdir($handle))
        {                   oder HIER?

        siehe oben...

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  2. Hallo mit'nander!

    Ich will aus einem Ordner die Anzahl Dateien auslesen:

    ...

    Aber irgendwie wird mir immer nur 0 ausgegeben.
    Was mache ich falsch?

    Danke schonmal im Vorraus

    Hi,

    in der php Dokumentation von readdir()
      http://www.php.net/manual/de/function.readdir.php
    findest du das Beispiel:
      "Example#2 Listet alle Dateien des aktuellen Verzeichnisses
      auf und blendet dabei . und .. aus."

    In dem Beispiel werden alle Dateinachem mit echo ausgegeben. Füge
    statt dessen deinen Zahler ein und es sollte laufen ....

    Gruss

    1. Hello,

      in der php Dokumentation von readdir()

      http://www.php.net/manual/de/function.readdir.php

      findest du das Beispiel:
        "Example#2 Listet alle Dateien des aktuellen Verzeichnisses
        auf und blendet dabei . und .. aus."

      Das listet alle Einträge mit Ausnahme der "Spezialeinträge" auf,
      also auch Links, Directories und was es sonst noch geben könnte.

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  3. Hallo!

    Ich hab am Prog weitergearbeitet. Aber es funktioniert immer noch nicht. Es wird nichts ausgegeben. Mir fallen bald die Augen aus dem Kopf.. kann sich das jemand mal anschaun?

    <?php

    $path=""
            $erlaubte_endungen = array('jpg','jpeg','gif','png');   //Erlaubte Endungen

    //Anzahl IMGDateien im Ordner $path
            $index=0;

    $files=array();
            if( $handle = opendir($path))
            {
                while (false !== ($file = readdir($handle)))
                {
                    if ($file != "." && $file != "..") //Auschliessen von Unterordner
                    {
                        $path_parts = $path.$file; //Ganze Pfad der Datei

    if($path_parts["extension"] == $erlaubte_endungen)  //Selektion: Nur bestimmte Dateieformate
                        {

    $index++;     //Zähler: wieviele Dateien hat es im Ordner?
                             $files[]=$file;  //Array mit allen Dateien im Ordner
                        }
                    }
                }
            }
              closedir($handle);
              //Schliessen des Ordners

    //Zufallszahl generieren
              $zufall=rand(0, $index);
              $file=$files[$zufall]; //Zufallsdatei

    if(!file_exist($file))  //Wenn die Datei noch nicht existiert
              {
              ##macht etwas
                  }

    }

    //Ausgabe der Datei
               echo $file;

    ?>

    Dankschön

    1. Hello Kati,

      <?php

      #? kein Pfad angegeben?

      $path="";

      $erlaubte_endungen = array('jpg','jpeg','gif','png');   //Erlaubte Endungen

      //Anzahl IMGDateien im Ordner $path
              $index=0;

      $files=array();

      if( $handle = opendir($path))
              {
                  while (false !== ($file = readdir($handle)))
                  {

      if ($file != "." && $file != "..") //Auschliessen von Überordner und eigenem

      {

      $fullpath = rtrim($path,'/').'/'.$file; //Ganzer Pfad der Datei
                            $path_parts = pathinfo($file);  ## Du willst doch nur die Extension

      if(in_array(strtolower($path_parts["extension"]), $erlaubte_endungen))

      Selektion: Nur bestimmte Dateieformate

      http://de2.php.net/manual/de/function.in-array.php

      {
                               $files[]=$fullpath;  //Array mit allen Dateien im Ordner
                          }
                      }
                  }

      closedir($handle);  ## man kann nur ein Verzeichnis schließen, das
                                        ## erfolgreich geöffnet wurde

      }

      //Schliessen des Ordners

      //Zufallszahl generieren
                $zufall=rand(0, $count($files));
                $file=$files[$zufall]; //Zufallsdatei

      if(!file_exist($file))  //Wenn die Datei noch nicht existiert
                {
                   ##macht etwas
                }

      else

      {

      //Ausgabe der Datei

      echo $file;

      }

      ?>

      Du hast jetzt aber immer noch Links und Directories mit in Deiner Auswahl.
      Die dürfen ja auch "erlaubte Endungen" im Namen haben.

      Mit is_file() könntest Du die Auswahl auf Dateien beschränken.
      Hatte ich Dir aber schon einmal geschreiben.

      Warum nun     $fullpath = rtrim($path,'/').'/'.$file; ?

      Wenn die Variable $path keinen abschließenden Slash enthält, würde er nach Deiner Methode im Fullpath fehlen. Hat sie einen und man hängt prophilaktisch aber noch einen an, kann es später Probleme bei Umleitungen und Rewrite geben, solltest Du das mal einsetzen wollen.

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)