Datei als Download

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Datei als Download

    Hallo,
    Ich habe etwas geschrieben, womit man Dateien auf der Website hochladen kann, Die werden für den User dann angezeigt und man kann sie einzeln löschen und so.
    Soweit funktioniert dies, nur die Datei kann man nicht runterladen.
    Wenn ich einen Link mit dem Dateiname generieren lasse und man dann draufklickt (z.B. HOMEPAGE.de/datei.txt) kann man sie nicht runterladen,
    sie wird auch nicht im Browser angezeigt, sondern kommt dann:

    Quellcode

    1. Forbidden
    2. You don't have permission to access /dateien/datei.txt on this server.
    3. Apache/2.2.3 (Debian) mod_ssl/2.2.3 OpenSSL/0.9.8c Server at www.HOMEPAGE.de Port 80


    Manchmal kommt dann der Fehler mit dem Text:

    Quellcode

    1. Not Found
    2. The requested URL /dateien/datei.txt was not found on this server.
    3. Apache/2.2.3 (Debian) mod_ssl/2.2.3 OpenSSL/0.9.8c Server at www.HOMEPAGE.de Port 80

    Und dann auch "Die Webseite kann nicht gefunden werden".


    Daraufhin habe ichs mal mit "header" versucht, und zwar so:

    Quellcode

    1. $dateiname = basename($datei);
    2. $groesse = filesize($datei);
    3. header("Content-Type: application/force-download");
    4. header("Content-Disposition: attachment; filename=".$dateiname);
    5. header("Content-Length:".$groesse);
    6. readfile($dateiname);


    die Variable $dateiname beinhaltet den Name der Datei (im Beispiel nun datei.txt).
    Dieser Wert wird via POST auch korreckt übergeben.


    Warum die Datei nicht runterladbar ist, weiß ich leider nicht,
    kann es vll. am Webspace liegen?
    Danke euch für eure Hilfe^^

    PS: Datei ist auf dem Server im richtigen Ordner

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von TheDD ()

  • Also das sieht mitlerweile etwas anders schon aus:

    Mit chmod ("data/".$dateiname, 0644); gebe ich den Dateien die Rechte 644.

    Der Ordner ist data, vergessen zu erwähnen, sry...
    also data/datei.txt. (beispiel)

    Die Links gehen nun, nur leider öffnet sich z.B. txt oder pdf im Browser, statt sie runter zu laden.
    Hier das mal ausführlicher:

    Quellcode

    1. $dateien = mysql_query("SELECT * FROM Daten ORDER BY ID DESC"); // DB
    2. while($row = mysql_fetch_assoc($dateien))
    3. {
    4. $idkill = $row[ID];
    5. $dateinameabb = $row[dateiname]; // Enthält aus SQL den Dateiname (datei.txt)
    6. echo "<a href='http://www.HOMEPAGE.de/data/$row[dateiname]'>$row[dateiname] herrunterladen</a><br />
    7. <form action='dataupload.php' method='post'><input type='submit' name='$dateinameabb' value='Download' /><br />
    8. <form action='dataupload.php' method='post'><input type='submit' name='$idkill' value='L&ouml;schen' />";
    9. if(isset($_POST[$idkill]))
    10. {
    11. mysql_query("DELETE FROM Daten WHERE ID = $idkill");
    12. unlink("data/".$row[dateiname]);
    13. echo "<br /><br />Datei gel&ouml;scht!<br /><br />";
    14. }
    15. elseif(isset($_POST[$dateinameabb]))
    16. {
    17. $groesse = filesize("data/".$dateinameabb);
    18. header("Content-Type: application/force-download");
    19. header("Content-Disposition: attachment; filename='data/$dateinameabb'");
    20. header("Content-Transfer-Encoding: binary");
    21. header('Content-Length: '.$groesse);
    22. }
    23. }
    Alles anzeigen


    So siehts ungefähr aus (Ich habs noch mit Tabelle und ein aar Daten mehr und so, aber wäre nun zuviel, alles zu posten, im Grunde ist das das ja^^)
    Klickt man nur den Link an, öffnet man die Date.
    Klickt man auf dem Button löschen, löscht er die Datei auch richtig aus der DB und aus dem Ordner.
    klick ich nun auf Download, passiert nichts...
    Zu jeder Datei gibt es ein SQL Eintrag, das funktioniert auch soweit, wie das hochladen der Datei und das chmod setzen und in die DB setzen und so.

    Nur noch der Downloadbutton muss gehen :D
    Und beim Link öffnet er es automatisch z.B. .pdf oder .txt im Browser.
  • okay, also habe ich nun header("Content-Disposition: attachment; filename='$dateinameabb'"); gemacht.
    Funktionieren tut es leider immer noch nicht.

    Ich habe auch mal via echo versucht, unter den header was anzeigen zu lassen, ob der Dateiname übergeben wird nud zwar so:
    <br /><br />Datei: $dateinameabb<br /><br />";

    Leider wird dies beim klick auf dem Button uch nicht angezeigt.
    Warum weiß ich auch nicht, da das mit dem löschen problemlos funktioniert...
  • Ach mir fällt auf.. du versuchst echos mit Downloads zu mischen. Das geht natürlich nicht.
    Wenn dein Dateidownload angestoßen wird, dürfen keine anderen Ausgaben vorhanden sein. Und nach dem readfile beendet du am besten mit exit.

    Weiterer Fehler: Du verwendest einfach Anführungszeichen beim Dateinamen. Es müssen laut HTTP Protokoll aber doppelte sein.