Frodo: Ordnerinhalte anzeigen; Nur bestimmte Dateitypen

Wie kann ich dieses Script ändern, dass das nur txt, html, php, jpg und endungslose Dateien angezeigt werden?

<?php
$ordner = "./eingang";
$handle = opendir($ordner);
while ($file = readdir ($handle)) {
if($file != "." && $file != "..") {
if(is_dir($ordner."/".$file)) {
echo "/".$file."<br/>";
} else {
// kompletter Pfad
$compl = $ordner."/".$file;
echo " <a href="".$compl."">".$file."</a><br/>";
}
}
}
closedir($handle);
?>

Das muss, so glaube ich, irgentwie mit if und einem subst. gehen.
ABER WIE????

[/Danke]

  1. Hallo!

    Wie kann ich dieses Script ändern, dass das nur txt, html, php, jpg und endungslose Dateien angezeigt werden?

    Du könntest Dir http://at2.php.net/manual/de/function.pathinfo.php zunutze machen, oder aber mit string-funktionen arbeiten. Letzteres ist performanter, denke ich.

    Mit http://at2.php.net/manual/de/function.strrpos.php kannst Du den Punkt ausfindig machen, welcher die extension vom Dateinamen trennt.
    Mit http://at2.php.net/manual/de/function.strrchr.php kannst Du die Extension ausgeben.

    Beste Grüße
    Viennamade

  2. Hallo,

    Stimmt, es geht u.a. mit substr und zwar so:

    $ext = array('txt', 'html', 'php', 'jpg');// enthaelt die gueltigen Endungen

    if(in_array(strtolower(substr(strrchr($file, '.'),1)),$ext))
    {
      echo '/' . $file . "<br/>\n";
    }
    Der Reihe nach:

    • strrchr($file, '.') gibt alles ab dem letzten Punkt zurueck, also etwa '.php'
    • substr(strrchr($file, '.'),1) nimmt davon alle Zeichen, abzgl. dem ersten, also 'php'
    • strtolower sorgt dafuer, dass die Dateiendungen unabhaengig von Gross-/Kleinschreibung behandelt werden, also wird aus 'PHP' und 'php' immer 'php'
    • in_array() schaut, ob der gefundene String im Array $ext vorhanden ist.
      Da in_array() true oder false zurueckgibt ist der Ausdruck in der Klammer auch true oder false. Fuer if(ausdruck == true) kann man aber auch sagen if(ausdruck);

    Bleiben noch die endungslosen Dateien, die sich ja dadurch auszeichen, dass sie keinen Punkt enthalten. Hier hilft strpos:

    • if(strpos($file, '.') === false), also wenn kein Punkt im Dateinamen vorkommt. Die drei '=' sind wichtig, weil das Ergebnis auch null sein koennte, zb. bei .htaccess, was bei zwei '=' als false interpretiert wuerde.
      Zusammengenommen sehen beide Bedingen so aus:
      if(in_array(strtolower(substr(strrchr($file, '.'),1)),$ext) || strpos($file, '.') === false)
      {
        echo '/' . $file . "<br/>\n";
      }

    Das war's, hoffentlich stimmen meine Klammern alle.

    Dieter

  3. Hello,

    Wie kann ich dieses Script ändern, dass das nur txt, html, php, jpg und endungslose Dateien angezeigt werden?

    while ($file = readdir ($handle)) {

    Das ist sowieso falsch, weil an der Datei mit dem namen '0' die Sache vorbei ist.

    Die richtige Schleifenbedingung heißt

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

    }

    Und schau Dir mal die Funktion glob() an.
    http://de2.php.net/manual/de/function.glob.php

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau