Es sollten Dateien auf einer Intranetseite zum Download angeboten werden. Das Problem: die Anzahl der Dateien, die Dateinamen und Dateitypen sind dynamisch. Hier hilft der PHP-Befehl „scandir“
Mit „scandir()“ kann man die Inhalt eines Verzeichnisses auflisten lassen. Das Ergebnis ist ein Array.
Ein einfaches Beispiel:
Ich erzeuge ein Verzeichnis „files“, welches die Dateien enthalten soll und eine Datei „index.php“ mit folgenden Inhalt.
1 2 3 4 |
<?php $files = scandir('./files'); echo($files); ?> |
Das ist schon mal der Grundstock.
Es werden aber nicht alle Informationen ausgegeben.
Hierfür gibt es die Anweisung „pathinfo“.
Mit „pathinfo“ stehen die Parameter „basename“ (Dateiname mit Extension) , „filename“, „extension“ und „dirname“ (Verzeichnispfad) zur Verfügung.
Um die komplette Ausgabe in einen Link zu packen, müssen nun die Daten in die einzelnen Einträge unterteil und die Infos mit „pathinfo“ erweitert werden, des weiteren müssen für die Webseite auch die Links erzeugt werden.
Das Aufteilen der Einträge erfolgt mit „foreach“.
1 2 3 4 |
<?php foreach (scandir('./files') as $file) { $fileinfo = pathinfo('./files'."/".$file); ?> |
Das Erzeugen der Links geht mit „<a href= ..>“.
1 |
<a href="<?php echo $fileinfo['dirname']."/".$fileinfo['basename'];?>"><?php echo $fileinfo['basename']; ?></a> |
Und das Beenden der Anweisung nicht vergessen.
1 2 3 |
<?php }; ?> |
Jetzt könnte man, als zusätzliche Info, noch die Dateigröße mit angeben(„filesize“).
1 |
$size = filesize('./files'."/".$file); |
und eventuell das Erstellungsdatum (filectime).
1 |
$cdate = filectime('./files'."/".$file); |
Alternativ könnte auch die Zeit der letzten Änderung verwendet werden (filemtime)
Ebenso muss natürlich auch die Ausgabe angepasst werden.
1 |
<a href="<?php echo $fileinfo['dirname']."/".$fileinfo['basename'];?>"><?php echo $fileinfo['basename']; ?></a><?php echo $size ; ?> <?php echo $cdate ; ?> |
Grundsätzlich funktioniert das Ganze schon mal, wenn auch die Ausgabe etwas unschön ist.
Die Angabe von „filectime“ ist in Sekunden seit 1.1.1970 0Uhr (Unix-Timestamp) und die Größe ist in Bytes.
Das Datum lässt sich in PHP leicht mit „date“ formatieren.
1 |
date("d.m.Y",$cdate) |
Um die Filegröße in eine angenehme Form zu bringen, kann man diese umrechnen.
1 2 3 |
Kilobytes / 1024 Megabytes / 1048576 = (1024 *1024) Gigabytes / 1073741824 = (1024 * 1024 * 1024) |
Um Kommastellen zu unterbinden, kann man den Befehl „ceil“ (Aufrunden) verwenden.
Da es sich bei mir um kleine Files handelte, habe ich die Ausgabe in Kilobyte gewählt.
1 |
$size = ceil(filesize('./files'."/".$file)/1024); |
Hier das gesamte Listing
1 2 3 4 5 6 7 8 9 10 |
<?php foreach (scandir('./files') as $file) { $fileinfo = pathinfo('./files'."/".$file); $size = ceil(filesize('./files'."/".$file)/1024); $cdate = filemtime('./files'."/".$file); ?> <a href="<?php echo $fileinfo['dirname']."/".$fileinfo['basename'];?>"><?php echo $fileinfo['basename']; ?></a> <?php echo $size ; ?>kb vom:<?php echo date("d.m.Y",$cdate) ; ?><br> <?php }; ?> |
Naja, es funktioniert schon mal, aber es bleibt noch Luft nach oben.
Weitere Anpassungen gibt es im Teil 2