• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Ordner durchsuchen

Status
Für weitere Antworten geschlossen.

Dark D.

Neues Mitglied
Kennt einer von euch vieleicht eine PHP Funktion, die den Inhalt des angegebenen Ordners ausgibt?
Sodass man in einem SELECT-Feld alle HTML-Dateien z.B. des Ordners Beispiel auflisten kann?

Gruß,
Markus
 
PHP:
<?php
  $dir = 'Beispiel/';

  if($verzeichnis = opendir($dir)) {
    while($datei = readdir($verzeichnis)) {
      if(!is_dir($datei))
        $inhalt[] = $datei;
    }
  }
  echo '<select name="auswahl">';
  foreach($inhalt as $datei)
    echo '<option>'.$datei.'</option>';
  echo '</select>';
?>
 
da sind 2 kleine Fehler drin ;)
PHP:
      if(!is_dir($datei))
        $inhalt[] = $datei;
müsste eigtl so sein denk ich
PHP:
      if(!is_dir($dir.$datei))
        $inhalt[] = $dir.$datei;

Außerdem würde ich die dir Klasse verwenden
PHP:
<?php
$d = dir("verzeichnis/");
while (false !== ($entry = $d->read())) {
  if(!is_dir($d->path.$entry))
    $inhalt[] = $d->path.$entry;
}
$d->close();
var_dump($inhalt);
?>
 
Zuletzt bearbeitet:
dir() ist eine Verzeichnisklasse. Mit der Verzeichnisklasse kannst du das Verzeichnis auslesen
PHP:
//verzeichnis öffnen
$d = dir("ein verzeichnis/");

//solange wie dateien vorhanden sind, die schleife durchlaufen
//$d->read() gibt die nächste datei aus dem Verzeichnis
//diese wird $entry zugewiesen
//wenn es keine Datei mehr gibt wird false geliefert
while (false !== ($entry = $d->read())) {
  //$entry kann jetzt ein Verzeichnis oder eine Datei sein.
  //Wir wollen aber nur Dateien
  if(!is_dir($d->path.$entry) {
    //is_dir() prüft ob die angegebene datei ein verzeichnis ist
    //$d->path() liefert den pfad zur Datei, dann hängen wir noch die datei
    //$entry dran
    //jetzt noch in das array schreiben
    $inhalt[] = $d->path.$entry;
  } 
}

Jetzt hast du im array $inhalt alle dateien aus dem Verzeichnis
 
Und wie krieg ich das Array in SELECT-Feld?

EDIT: Dumme Frage, mit einer Schleife natürlich.
 
Zuletzt bearbeitet:
PHP:
  echo '<select name="auswahl">';
  foreach($inhalt as $datei)
    echo '<option>'.$datei.'</option>';
  echo '</select>';

einfach anhängen.
 
Das klappt wirklich super, vielen Dank!
Gibt es jetzt noch eine Möglichkeit, nur .html Dateien anzeigen zu lassen?
 
jop schreib vo dein foreach einfach noch ein foreach was die dateien rausnimmt.
Dann sortierst du noch die Schlüssel neu und fertig ^^
PHP:
<?php
$d = dir("verzeichnis/");
while (false !== ($entry = $d->read())) {
  if(!is_dir($d->path.$entry))
    $inhalt[] = $d->path.$entry;
}
$d->close();
foreach($inhalt as $k => $test) {
  if(!preg_match("/^(.+)\.html$/",$test))
    unset($inhalt[$k]);
}
$array = $inhalt;
unset($inhalt);
sort($array);
for($i=0;$i<count($array);$i++)  {
  $now = each($array);
  $inhalt[$i]=$now['value'];
}
echo '<select name="auswahl">';
foreach($inhalt as $datei)
  echo '<option>'.$datei.'</option>';
echo '</select>';
?>
 
Funktioniert nicht. :sad:
Kannst du den Quelltext nicht noch mal mit Kommentaren schreiben?

EDIT: Nicht mehr nötig, habs schon geschafft.
Trotzdem noch eine Frage: Wenn ich das '!' vor is_dir() wegnehme werden auch Ordner angezeigt.
Kann man diese auch zu so eine Art Menü machen, so dass die Dateien im Ordner aufklappen?
 
Zuletzt bearbeitet:
hab das ganze nochmal gekürzt und verbessert
PHP:
<select>
<?php
$d = dir("Upload/");
while (false !== ($entry = $d->read())) {
  if(!is_dir($d->path.$entry) && preg_match("/\.html$/i",$entry))
    echo '<option value="'.$d->path.$entry.'">'.$d->path.$entry.'</option>';
}
$d->close();
?>
</select>

wenn du irgendeine Funktion nicht verstehst guck doch bei php.net ;)
 
wenn das ! weg nimmst werden nur noch ordner angezegit

ja du kannst so ein menü machen, das müsstest du dann rekursiv aufbauen.
 
PHP:
<?php
  $d = dir("../");
    while (false !== ($entry = $d->read())) {
        if (preg_match("/^[a-zA-Z0-9]+\.html$/", $entry)) {
            $inhalt[] = $d->path.$entry;
        }
        if (is_dir($d->path.$entry)) {
            $inhalt[] = $d->read(path.$entry);
        }
    }
?>
Der 2. if-Block klappt natürlich nicht :cry:, welche Funktion muss ich denn benutzen, um Verzeichnisse zu durchsuchen?
 
probier es mal so. Habs allerdings noch nicht getestet
PHP:
   <?php
function searchrekursiv($direc,&$inhalt) {
  $d = dir($direc);
  while (false !== ($entry = $d->read())) {
    if ((is_dir($d->path.$entry)&&$entry!="."&&$entry!="..") || 
    (!is_dir($d->path.$entry) && preg_match("/^[a-zA-Z0-9]+\.html$/", $entry))) {
      $inhalt[] = $d->path.$entry;
    }
    if (is_dir($d->path.$entry)) {
      searchrekursiv($d->path.$entry,$inhalt)
    }
  }
}
$inhalt = array();
searchrekursiv("../",$inhalt);
echo "<pre>";
print_r($inhalt);
echo "</pre>";
?>
 
Das reißt alles wieder in Stücke :sad:.
Die Ausgabe erfolgt nämlich so:
../.DATEI/
../.DATEI/
../ORDNERDATEI/

Sie soll aber so lauten:
DATEI
DATEI
ORDNER/DATEI

Der Code dazu:
PHP:
<?php
function searchrekursiv($direc,&$inhalt) {
  $d = dir($direc);
  while (false !== ($entry = $d->read())) {
    if ((is_dir($d->path.$entry)&&$entry!="."&&$entry!="..") ||
    (!is_dir($d->path.$entry) && preg_match("/^[a-zA-Z0-9]+\.html$/", $entry))) {
      $inhalt[] = $d->path.$entry;
    }
    if (is_dir($d->path.$entry)) {
      searchrekursiv($d->path.$entry, $inhalt);
    }
  }
}
$inhalt = array();
searchrekursiv("../",$inhalt);
?>
Leider hab ich keine Ahnung von z.B. den Pfeilen in Code, deshalb wollte ich mal am Rande fragen:
Wo habt ihr alle denn PHP (oder anderes) gelernt?
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben