[PHP]Alle Datein und Unterordner + Links auflisten

hallo2000

New member
Hallo,

ich wollte mal fragen, wie ich Alle Datein und Unterordner aus einem Ordner auf dem Webspace auslesen kann. Und dann möglichst bei den Datein die Links noch dazu.
Habe schon gegooglet aber ich finde nichts richtiges, wo auch die Links angezeigt wird.

Mit freundlichen Grüßen hallo2000

EDIT:
Diesen Code habe ich getestet:
Er funktioniert auch doch leider ohne Link. Kann man das vieleicht noch hinzufügen?
 
Zuletzt bearbeitet:
Wo ist das Problem? Du musst doch nur die Pfade auf URLs abbilden.

Ich schätze mal, dass dann sowas in der Art raus kommt:
Code:
/var/www/ordner/datei
/var/www/ordner/ordner2/datei
/var/www/ordner/ordner2/datei2

Dann ersetzt du das "/var/www" durch den absoluten Pfad "http://www.seite.de". Oder du löscht das /var/www und hast relative Pfade vom document root.

Das Ganze dann natürlich noch ausgeben...

Edit: Sehe gerade, dass nur der Dateiname ausgegeben wird. Du brauchst natürlich den Pfad auch.
PHP:
printf( "% ".$pos."s %s\n", '|-', $dir.$file );
 
Zuletzt bearbeitet:
also bis jetzt kommt nur der Dateiname raus.
Ich möchte ja auf diesen Dateiname noch den Link haben.
Wie kann ich das den dazu geben?
 
Siehe mein Edit. Mit $dir.$file hast du den Pfad ab dem angegebenen Such-Verzeichnis.

Die Ausgabe ist dann ja leicht:
PHP:
echo "<a href='$dir$file'>$file</a>";

Das funktioniert natürlich nur solange du einen Pfad innerhalb von /var/www/ angibst (bzw. wo auch immer document root ist). Macht andernfalls aber auch keinen Sinn, weil du auf andere Dateien nicht verlinken kannst.
 
ok, aber wie kann ich das var/www/ nun ändern?

EDIT:

Ich hab das jetzt mal geändert und jetzt wird auch noch etwas vom Pfad hinzugefügt.
Aber ich möchte es eigentlich möglichst so, das nur der Dateiname angezeigt wird und dann wenn man draufklickt, das man dann die Datei öffnet.
 
Zuletzt bearbeitet:
Ich glaube du solltest dich erst mal mit den Grundlagen von PHP beschäftigen. Besser sogar erst mal HTML.

Ein Link sieht so aus: <a href="PFAD_ZUR_DATEI">LINKNAME</a>

Du musst nur alles an der richtigen Stelle einsetzen.
 
Also mit HTML kenne mich etwas aus.
Ich weiss auch wie ich einen text per HTML ausgebe doch mein Problem ist, das ich das mit dem Link nicht hinbekomme.
 
Zuletzt bearbeitet:
das funktioniert ja nicht.
Es werden nur die Namen angezeigt und es werden keine Links dazu gemacht und dann wird auch noch die ganze seite zerstört.
 
PHP:
<?php
 
function show_dir( $dir, $pos=2 )
{
    if ( $pos == 2 ) {
        echo "<hr /><pre>";
    }
 
    $handle = @opendir( $dir );
    if ( is_resource( $handle ) ) {
        while ( ( $file = readdir( $handle ) ) !== false ) {
            if ( preg_match( '~^\.{1,2}$~', $file ) ) {
                continue;
            }
 
            if ( is_dir( $dir.$file ) ) {
                printf( "% ".$pos."s <b>%s</b>\n", '|-', $file );
                show_dir( $dir.$file.'/', $pos + 3 );
            } else {
                printf( "% ".$pos."s %s\n", '|-', $file );
            }
        }
        closedir($handle);
    }
 
    if ( $pos == 2 ) {
        echo "<a href='$dir$file'>$file</a>"; 
    }
}
 
show_dir( 'raven-files/' );
 
?>
 
Hast du dir einfach irgendein echo ausgesucht und das ersetzt? 🙂

Zugegeben, der Code ist nicht ganz einfach, vor allem weils eine rekursive Funktion ist. Aber die 2 Bedingungen am Anfang und Ende sind lediglich für die 2 horizontalen Linien.

PHP:
<?php
 
function show_dir( $dir, $pos=2 )
{
    if ( $pos == 2 ) {
        echo "<hr /><pre>";
    }
 
    $handle = @opendir( $dir );
    if ( is_resource( $handle ) ) {
        while ( ( $file = readdir( $handle ) ) !== false ) {
            if ( preg_match( '~^\.{1,2}$~', $file ) ) {
                continue;
            }
 
            if ( is_dir( $dir.$file ) ) {
                // Ausgabe: Verzeichnisname
                printf( "% ".$pos."s <b>%s</b>\n", '|-', $file );
                show_dir( $dir.$file.'/', $pos + 3 );
            } else {
                // Ausgabe: Dateiname
                $link = "<a href='$dir$file'>$file</a>";
                printf( "% ".$pos."s %s\n", '|-', $link );
            }
        }
        closedir($handle);
    }
 
    if ( $pos == 2 ) {
        echo "</pre><hr />"; 
    }
}
 
show_dir( 'raven-files/' );
 
?>
 
Ich danke dir.
Es hat endlich funktioniert.
Danke, Danke, Danke


EDIT (autom. Beitragszusammenführung):


Ich hätte noch eine Frage.
Kann ich diese Funktion auch per Button oder HTML link durch klick ausführen, so das es aktualisiert wird?
 
Zuletzt bearbeitet:
Jain.

Wenn die Seite schon geladen wird kannst du mit PHP nichts mehr machen. Du könntet höchstens die komplette Seite mit einem Button aktualisieren (<input type="button" value="Aktualisieren" onclick="window.location.reload()"/>).

Eine bessere, aber auch etwas kompliziertere Möglichkeit wäre AJAX. Dafür speicherst du nur die Funktion und sonst nichts in eine PHP-Datei und rufst sie mit JS später auf. So kannst du auch die Liste aktualisieren ohne die Seite komplett neu laden zu müssen. Ich würde dafür eine JS Bibliothek wie JQuery oder prototype verwenden - macht das Ganze wesentlich einfacher.
 
dann mach ich mir das erstmal leicht und lade die Seite ganz neu.
Aberich werde mir das andere auch mal anschauen.
Danke.


EDIT (autom. Beitragszusammenführung):


Ich hab das noch eine frage zu der Dateiauflistung.
Also die Datein werden nun ja aufgelistet.
Nun möchte ich noch ein kleines Bild daneben haben, womit ich die Datein löschen kann. Das Bild wird schn angezeigt und ich weiss auch wie man Datein löscht, doch kann man das überhaupt so machen, weil das Datein löschen ja nur mit php geht?
 
Zuletzt bearbeitet:
Dafür musst du einen neuen Request an den Server schicken und den dann auswerten, entweder über POST oder GET.

Es macht aber nicht viel Sinn jetzt eine Lösch-Funktion einzubauen, wenn du dich nicht authentifizieren kannst. Denn so kann jeder einfach irgendwelche Dateien löschen.

 
ne, das stimmt nicht gans, weil bevor man da überhaupt hinkommt, muss man sich einloggen. Und das läuft wiederrum über eine MySQL Datenbank.
Und die, die sich dort einloggen können, bin ich und 2 Kumpels und wenn wir etwas löschen, ist das ok.
 
Möchte mich hier nicht wirklich in den Thread reinhängen, aber ich finde die schreibeweise:
PHP:
$link = "<a href='$dir$file'>$file</a>";
nicht wirklich schön.

Ich würde immer folgende Schreibweise bevorzugen. Das macht den Code einfach lesbarer.

PHP:
$link = "<a href='".$dir.$file."'>$file</a>";
Sieht doch gleich viel schicker aus 🙂 Bei größeren Strings oder Verkettungen wäre es sonst echt übel sich da einlesen zu müssen.

Nur so als Tip!
 

Online-Statistiken

Zurzeit aktive Mitglieder
1
Zurzeit aktive Gäste
28
Besucher gesamt
29

Beliebte Forum-Themen

Zurück
Oben Unten