Datei-Download per PHP wird mit 0Byte geladen
Hallo zusammen,
ich versuche gerade einige Downloads auf meiner Seite per PHP-Script anzubieten. Warum ich das mache?
Damit die Dateien nicht direkt verlinkt werden können und auch nur die Dateien geladen werden von denen ich es auch möchte.
Per PHP-FAQ konnte ich mir etwas passendes ummodellieren.
Script:
Nun zum problem.
Rufe ich einen Download auf, z.b. (.....download.php?download=file1) kommt auch wie gewohnt das Download Fenster mit allem drum und dran ;).
Öffne oder speichere ich die Date ist sie gerade mal 0 Byte (also nix) groß. Woran könnte das liegen?
Habe mir auch mal ein echo von dem Pfade geben lassen, dieser müsste stimmen mit (/srv/www/vhosts/DOMAIN.DE/files/file1).
Ich hoffe jemand kennt das Problem und man kann mir helfen
Schon mal vielen Dank im vorraus.
Gruß
ich versuche gerade einige Downloads auf meiner Seite per PHP-Script anzubieten. Warum ich das mache?
Damit die Dateien nicht direkt verlinkt werden können und auch nur die Dateien geladen werden von denen ich es auch möchte.
Per PHP-FAQ konnte ich mir etwas passendes ummodellieren.
Script:
<?php
$download = $_GET['download'];
$basedir = "/srv/www/vhosts/DOMAIN.DE/files";
//Liste der vorhandenen Dateien
$filelist = array (
"file1" => "file1.zip",
"file2" => "file2.rar",
"file3" => "file3.rar"
);
// Einbruchsversuch abfangen.
if (!isset($filelist[$download]))
die("there is no $download.");
//Vertrauenswürdigen Dateinamen basteln.
$filename = sprintf("%s/%s", $basedir, $filelist[$download]);
//Passenden Datentyp erzeugen
header("Content-Type: application/octet-stream");
//Passenden Dateinamen im Download-Requester vorgeben
$save_as_name = basename($filelist[$download]);
header("Content-Disposition: attachment; filename=\"$save_as_name\"");
//Datei ausgeben
readfile ($filename);
?>
Rufe ich einen Download auf, z.b. (.....download.php?download=file1) kommt auch wie gewohnt das Download Fenster mit allem drum und dran ;).
Öffne oder speichere ich die Date ist sie gerade mal 0 Byte (also nix) groß. Woran könnte das liegen?
Habe mir auch mal ein echo von dem Pfade geben lassen, dieser müsste stimmen mit (/srv/www/vhosts/DOMAIN.DE/files/file1).
Ich hoffe jemand kennt das Problem und man kann mir helfen
Schon mal vielen Dank im vorraus.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 117318
Url: https://administrator.de/contentid/117318
Ausgedruckt am: 25.11.2024 um 03:11 Uhr
10 Kommentare
Neuester Kommentar
aus dem PHP Handbuch:
evtl. kann man noch den Header 'Content-length' hinzufügen
der Pfad: "/srv/www/vhosts/DOMAIN.DE/files/file1" .. da fehlt doch '.php' - oder so ?
... sehe deshalb nicht unbedingt einen Fehler in deinem Script - evtl. kann die Datei nicht gelesen werden ?
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
readfile('original.pdf');
evtl. kann man noch den Header 'Content-length' hinzufügen
header('Content-length: '.filesize('original.pdf'));
der Pfad: "/srv/www/vhosts/DOMAIN.DE/files/file1" .. da fehlt doch '.php' - oder so ?
... sehe deshalb nicht unbedingt einen Fehler in deinem Script - evtl. kann die Datei nicht gelesen werden ?
kaiand1s erster Punkt ist Quark.
Der zweite Punkt stimmt hingegen.
Ich kann an deinem Code auf Anhieb keinen Fehler erkennen, darum wie immer:
Am Anfang des Scripts hinzufügen und die Apache Log oder heruntergeladene Datei beobachten.
Grüße
Max
readfile
gibt eine Datei direkt auf stdout wieder aus.Der zweite Punkt stimmt hingegen.
Ich kann an deinem Code auf Anhieb keinen Fehler erkennen, darum wie immer:
<?php
error_reporting(E_ALL|E_NOTICE);
ini_set('display_errors','On');
?>
Am Anfang des Scripts hinzufügen und die Apache Log oder heruntergeladene Datei beobachten.
Grüße
Max
Ach, ignoriert mich doch alle :'(
Zitat von @dog:
Ich kann an deinem Code auf Anhieb keinen Fehler erkennen, darum wie
immer:
Am Anfang des Scripts hinzufügen und die Apache Log oder
heruntergeladene Datei beobachten.
Ich kann an deinem Code auf Anhieb keinen Fehler erkennen, darum wie
immer:
> <?php
> error_reporting(E_ALL|E_NOTICE);
> ini_set('display_errors','On');
> ?>
>
Am Anfang des Scripts hinzufügen und die Apache Log oder
heruntergeladene Datei beobachten.