yubb.de-Logo
Tutorials
yubb@yubb
yubbService
Inside yubb

Downloadsection in PHP



Wer kennt das nicht? Ihr wollt mehrere Downloads auf eurer Seite anbieten und müsst jede Datei einzeln in eine HTML-Tabelle schreiben. yubb.de schafft nun Abhilfe. Hier eine Anleitung für ein Script, wobei ihr einfach nur die Dateien in ein Verzeichnis eurer Download-Section hochladen müsst. Dateiname, Größe und Downloadlink werden dann automatisch angezeigt. Hier nun zuerst das Script:

PHP-Datei:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?
// In diesem Verzeichnis befinden sich die Downloads
$path "downloads";

// Öffnen des Verzeichnisses
$handle opendir ($path);
// Für jede Datei im Verzeichnis eine neue Zeile als Schleife
while (false !== ($file readdir ($handle)))
{
  if (
$file != "."){
    if (
$file != ".."){
      if (
$file != "index.html") {

      
// Grösse bestimmen
      
$sizeof filesize($path."/".$file);
      
$sizemb $sizeof/1024/1024 ;
      
$mb substr ("$sizemb"03);

      
// Ausgabe des Links
      
if (! is_dir($path."/".$file)) {
        print 
"<a href='$path/$file'><font><b>$file</b></a>  ( size: $mb MByte )</font>
"
;
        }
      }
    }
  }
}
// Verzeichnis wieder schliessen
closedir($handle);
?>


So kann das Script schon direkt eingebaut und verwendet werden. Wenn ein Verzeichnis geöffnet wird, werden jeweils auch die Ordnerstrukturen angezeigt. Also auch die Punkte . fürs aktuelle und .. für das übergeordnete Verzeichnis. Um diese auszublenden, benötigen wir diesen Teil:

Code:

if ($file != "."){
if ($file != ".."){


Wobei hier != bedeutet, wenn die Datei nicht . oder .. heisst, dass sie dann angezeigt wird.

Und, um zu verhindern, das jemand über den Browser in das Verzeichnis deiner Downloads gelangt, speicherst du hier noch eine index.html hinein. Diese wird dann aufgerufen, wenn jemand http://www.deineurl.de/download/ eingibt.

Und damit auch diese index.html nicht als downzuloadende Datei angezeigt wird, benötigen wir dies:

Code:

if ($file != "index.html") {


Was jetzt noch zu tun ist, die Zeile, wo dann der Download steht, euren Wünschen entsprechend anzupassen. Dies geschieht hier:

Code:

print "<a href='$path/$file'><font><b>$file</b></a>  ( size: $mb MByte )</font>
";


Geschrieben von DiWoWo am 18.06.2004 (8153x gelesen)
weiterempfehlen weiterempfehlen   Druckversion Druckversion   kommentieren kommentieren

Wobei man sich
if ($file != "."){
if ($file != ".."){
if ($file != "index.html" {
einsparen kann und stattdessen
if($file!="." && $file!=".." && $file!="index.html") {
schreiben kann...

Man muss nur die entsprechenden }-Klammern löschen.
Geschrieben von Phil Marx
Mir ist noch etwas aufgefallen:
Es wäre besser, die Dateigrößen nicht einzulesen und dann nach
3 Stellen zu beschneiden ($mb = substr ("$sizemb", 0, 3);). Dies hätte zur Folge, dass z.B. Dateien > 100 MB keine, zweistellige Dateigrößen eine und einstellige Dateigrößen zwei Nachkommastellen haben.

Besser wäre es, die Dateigröße in MB und zwei Nachkommastellen zu runden:
$mb = round ($sizemb,2);

Einfach ggf. die Zeilen ersetzen.
Geschrieben von Phil Marx
Blöd ist nur, dass die Dateien nicht sortiert werden
Geschrieben von dasepp