Verzeichnisse auslesen und auflisten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Verzeichnisse auslesen und auflisten

    Hiho,

    hab ein kleineres Problem, auch schon ein bisschen gegoogled, komme aber nicht dahinter:

    Ich möchte erst alle Unterordner eines Galerie Ordners auslesen, und die Datein aus diesen Unterordnern dann mit Radio-buttons auflisten:

    PHP-Code:
    <?php

            error_reporting
    (E_ALL); #zeig alle Fehler
            
    ini_set('display_errors''1'); #sorgt dafür, dass überhaupt Fehler angezeigt werden

            
    $pfad="./galerie/";     
            
    $verz=opendir ($pfad);
                while (
    $file=readdir($verz))
            {
                    if(
    $file != "." && $file != ".." &&  $file != "temp"
                    {
                                
    $dir opendir($file);
                                while(
    $datei readdir($dir))
                              {
                                if(
    $datei != "." && $datei != "..") {
                                
                            echo 
    "<input type=\"radio\" name=\"canvas\" value=\"$datei\"><a href=\"$pfad/$datei\" 
    target=\"_blank\">
    $datei</a><br>\n";
                                        }
                               }
                            
    closedir($dir);
                          
                         
                    }
            }

    ?>
    Fehlermeldung:

    PHP-Code:
    Warningopendir(444) [function.opendir]: failed to open dirNo error in ... (pfad)

    Warningreaddir(): supplied argument is not a valid Directory resource in ...(pfad)

    Warningclosedir(): supplied argument is not a valid Directory resource in ...(pfad
    444 ist der Ordner, der sich testweise im Galerie-Ordner befindet, aber warum ist der nicht zu öffnen?

    MFG
    Zuletzt geändert von xserio; 18.12.2008, 21:43.

  • #2
    opendir(444) sagt doch schon alles. An der Stelle opendir($file) steht in $file nur der Dateiname und nicht der komplette Pfad.
    Hint: $pfad.$file

    Kommentar


    • #3
      Hi xserio,

      in dem Moment in dem Du in Zeile 12 sagst

      PHP-Code:
                                  $dir opendir($file); 
      da ist $file nicht mehr unbedingt ein Verzeichnis, weil Du Sie in Zeile 8 mit einem Verzeichniseintrag überschreibst:

      PHP-Code:
                  while ($file=readdir($verz)) 
      Für solche Zwecke sind rekursiv aufgerufene Funktionen ideal. So würde das in Deinem Fall aussehen:

      PHP-Code:
      function printDir($pfad)
      {
          
      // entferne event. abschliessendes slash
          
      if ($pfad{strlen($pfad)-1} === '/'$pfad substr($pfad,0,-1);
          
          
      $verz=dir($pfad);
          while (
      false !== ($file $verz->read()))
          {
              if (
      $file != '.' && $file != '..')
              {
                  
      $file $verz->path.'/'.$file;

                  if (
      is_dir($file.'/'))
                      
      printDir($file);
                  else
                      echo 
                          
      '<input'.
                          
      ' type="radio"'.
                          
      ' name="canvas"'.
                          
      ' value="'.$file.'"'.
                          
      '>'.
                          
      '<a href="'.$file.'"'.
                          
      ' target="_blank"'.
                          
      '>'.
                          
      basename($file).
                          
      '</a><br />';
              }
          }
          
      $verz->close();
      }

      printDir('galerie/'); 
      Rekursiv deshalb, weil sich die Funktion in Zeile 14 selbst aufruft.


      Viele Grüße

      SLind

      Kommentar


      • #4
        Original geschrieben von SLind

        PHP-Code:
        function printDir($pfad)
        {
            
        // entferne event. abschliessendes slash
            
        if ($pfad{strlen($pfad)-1} === '/'$pfad substr($pfad,0,-1);

        Zwei Kleinigkeiten: 1. Die {}-Syntax ist bald deprecated. Man hat sich letzten Endes auf [] geeinigt (falls sich das nicht auch wieder geändert hat). 2. Die Bedingung kannst du dir sparen:
        PHP-Code:
        $path rtrim($pathDIRECTORY_SEPARATOR). 
        tuts auch.
        In puncto Rekursion sei dringlichst auf den Begriff Abbruchbedingung hingewiesen.


        Grüße
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          Original geschrieben von PHP-Desaster
          opendir(444) sagt doch schon alles. An der Stelle opendir($file) steht in $file nur der Dateiname und nicht der komplette Pfad.
          Hint: $pfad.$file
          ouh man, da hätte ich auch selber drauf kommen können ;D danke dir

          @SLind: deine funktion klappt auch wie gewünscht, danke dafür. Aber welchen Vorteil habe ich davon, das die Funktion rekursiv ist, meine Funktion tut ja im endeffekt das gleiche..?

          Kommentar


          • #6
            Original geschrieben von Griecherus
            Die {}-Syntax ist bald deprecated. Man hat sich letzten Endes auf [] geeinigt (falls sich das nicht auch wieder geändert hat).
            Gut zu wissen!

            Original geschrieben von Griecherus
            In puncto Rekursion sei dringlichst auf den Begriff Abbruchbedingung hingewiesen.
            Abbruchbedingung: ($file = $verz->read()) === false

            Original geschrieben von xserio
            @SLind: ... Aber welchen Vorteil habe ich davon, das die Funktion rekursiv ist, meine Funktion tut ja im endeffekt das gleiche..?
            Nicht ganz. Die rekursive Funktion zeigt auch Unterverzeichnisse in Unterverzeichnissen in Unterverzeichnissen ... an. Geht also unendlich tief und zeigt somit wirklich alle Dateien an. Deine Funktion endet nach der ersten "Ebene".

            Viele Grüße

            SLind

            Kommentar


            • #7
              ah, gut zu wissen
              werd ich bestimmt nochmal brauchen

              Kommentar


              • #8
                Original geschrieben von Griecherus
                Zwei Kleinigkeiten: 1. Die {}-Syntax ist bald deprecated. Man hat sich letzten Endes auf [] geeinigt (falls sich das nicht auch wieder geändert hat).
                Hast du mal nen Link zu Infos?

                mfg

                Kommentar


                • #9
                  Original geschrieben von Blackgreetz
                  Hast du mal nen Link zu Infos?

                  mfg
                  Klar, ich habe mich damals hieran orientiert. Ich habe spontan nichts "aktuelleres" aus erster Hand gefunden.


                  Grüße

                  EDIT:
                  Ich sehe gerade ich habe die 1000er Marke geknackt.
                  Nieder mit der Camel Case-Konvention

                  Kommentar


                  • #10
                    Original geschrieben von Griecherus
                    Klar, ich habe mich damals hieran orientiert.
                    Reicht mir schön - danke

                    ..und glw

                    Kommentar


                    • #11
                      Man kann sich es auch komplizierter machen:

                      PHP-Code:

                      error_reporting
                      (E_ALL E_STRICT);
                      ini_set('display_errors'TRUE);

                      // Einstellungen
                      $filter     '/\.jpg$/i';  // regex
                      $such_in    './Galerie';   // Verzeichnis, welches durchsucht werden soll

                      class RegexFilter extends FilterIterator
                      {
                        protected 
                      $regex '';

                        public function 
                      __construct(Iterator $iterator,$regex)
                        {
                          
                      $this->regex $regex;
                          
                      parent::__construct($iterator);
                        }

                        public function 
                      accept()
                        {
                          return (bool) 
                      preg_match($this->regex,$this->current());
                        }
                      }

                      // Rekursivgedöns
                      $dir =  new RegexFilter(
                                  new 
                      RecursiveIteratorIterator(
                                    new 
                      RecursiveDirectoryIterator($such_in)),$filter);

                      foreach(
                      $dir as $datei)
                       echo 
                      "<input type='radio' name='canvas' value='$datei'> $datei <br>"
                      Wir werden alle sterben

                      Kommentar


                      • #12
                        Warum nicht gleich den "echten" RegexIterator?

                        Kommentar


                        • #13
                          Weil er weder ein Recursiv noch ein Directory Iterator ist.
                          Würde ich mal so sehen...
                          Ich wüsste nicht wie man ihn dran baut...
                          Und schließlich will ich ja auch filtern
                          Zuletzt geändert von combie; 18.12.2008, 23:56.
                          Wir werden alle sterben

                          Kommentar


                          • #14
                            hrm, jetzt steht ich gleich vor nem nächsten problem, wie ich aus den einzelnen Verzeichnissen die Datein nach der Auflistung lösche :/

                            PHP-Code:

                            <?php

                                    error_reporting
                            (E_ALL); #zeig alle Fehler
                                    
                            ini_set('display_errors''1'); #sorgt dafür, dass überhaupt Fehler angezeigt werden

                                    
                            $pfad="./galerie/";     
                                    
                            $verz=opendir ($pfad);
                                        while (
                            $file=readdir($verz))
                                    {
                                            if(
                            $file != "." && $file != ".." &&  $file != "temp"
                                            {
                                                    echo 
                            "<td valign=\"top\"><p class=\"galüber\" align=\"left\"><b><u>Galerie: $file</u></b><br>
                                                    <form method=\"post\" action=\"backend.php\">
                                                    "
                            ;
                                                        
                                                        
                            $dir opendir($pfad.$file);
                                                        while(
                            $datei readdir($dir))
                                                      {
                                                        if(
                            $datei != "." && $datei != "..") {
                                                        
                                                    
                                                    echo 
                            "<input type=\"radio\" name=\"loeschen\" value=\"$datei\">
                                                    <a class=\"gallinks\" href=\"
                            $pfad$file/$datei\"     target=\"_blank\">
                                                    <span id=\"gallinks\">
                            $datei</a></span><br>\n";
                                                                }
                                                       }
                                                    
                            closedir($dir);
                                                    
                                                        
                            $pfadtwo $pfad.$file."/";

                                                        if (isset( 
                            $_POST['loeschen'] ))  {
                                                        
                            $tempfile $_POST['loeschen'];
                                                        
                            unlink($pfadtwo.$tempfile);
                                                        echo 
                            "<i>$tempfile</i> gelöscht";
                                                        }
                                                    
                                                    echo 
                            "<input type=\"submit\" value=\"L&ouml;schen\">
                                                    </form></p></td>"
                            ;
                                                          
                                                 
                                            }
                                    }

                            ?>
                            so sieht das momentan aus... Problem ist, das er natürlich in jeder Spalte der Tabelle, also in jedem Unterordner nach der Datei sucht und die löschen will, ich frag mich, wie ich die Zuweisung auf genau diesen Ordner hinbekommen soll...

                            mfg
                            Zuletzt geändert von xserio; 19.12.2008, 01:27.

                            Kommentar


                            • #15
                              Ach, ich würde ja den Code von mir nehmen. Von Radio auf Checkbox umbauen. Und dabei gleich aus dem Boxnamen ein Array machen. Per Foreach Schleife kannste dann dutzende von Dateien auf einen Schlag löschen.
                              Musst nur ein bisschen aufpassen, dass dir kein "falscher" Dateiname untergeschoben wird.
                              Wir werden alle sterben

                              Kommentar

                              Lädt...
                              X