Dateien mit PHP an den Client senden

Peter Bucher

Angesehenes Mitglied
Hallo,
habe mir einige Sachen betreff dieses Thema durchgelesen aber leider machts jeder ein bisschen anders, dass kenn ich so nicht weil ich von A*P her komme.

Könnte mir jemand sagen was an diesem Code falsch sein könnte?

Es geht um die startdownload Prozedur, die Dateien sind nach dem herunterladen ungültig,
am liebsten währe mir wenn mir jemand sagen könnte welche methode den heutzutage gängig ist, kann mich für keine Entscheiden, habs jetzt mal mit flush() gemacht, leider sind die Dateien im Nachhinein ungültig... sonst geht alles flott und korrekt, auch keine Fehlermeldungen.

CODE
<?PHP
 // -----------------------------------------------------------------
 // --- Prozedur startDownload
 // -----------------------------------------------------------------
 // --- Stream-Download starten
 // -----------------------------------------------------------------
 // --- Parametername       Datentyp       Verwendung
 // -----------------------------------------------------------------
 // --- FileName            String         Name der Datei
 // --- filePath            String         Pfad zur Datei
 // -----------------------------------------------------------------
 function startdownload($file_name, $file_location)
 {
     $path = $file_location.$file_name;
     
     header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
     header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
     header("Cache-Control: no-store, no-cache, must-revalidate");
     header("Cache-Control: post-check=0, pre-check=0", false);
     header("Pragma: no-cache");
     
     header("Content-type: application/octet-stream");
     header("Content-Disposition: attachment; filename=".$file_name);
     header("Content-transfer-encoding: binary");
     header("Content-length: ".filesize($path));
     @readfile($path);
     flush();
 }
?>
 
Ciao error

probier doh mal folgendes Schnipsel aus der offiziellen Doku:

CODE <?php

// open the file in a binary mode
$name = ".\public\dev\img\ok.png";
$fp = fopen($name, 'rb');

// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

// dump the picture and stop the script
fpassthru($fp);
exit;

?>

http://ch2.php.net/manual/en/function.fpassthru.php

Gruss
Roger
 
sowas such ich auch schon lange. danke, werd mich auch noch etwas umsehen dazu.
smile.gif
 
Mann bin ich ein Depp
tongue.gif


Hab doch glatt bei der filesize(xxx) den Dateinamen angegeben der beim download angenommen wird und nicht der reale mit der ID und einer speziellen Endung dran.

Najo, danke sowieso, meine Lösung sieht jetzt so aus:

CODE
function startdownload($file_name, $real_file_name, $file_location)
{
$path = $file_location.$real_file_name;

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

//header("Content-type: application/octet-stream");
header("Content-Type: application/force-download; name=$file_name");
header("Content-Disposition: attachment; filename=".$file_name);
header("Content-transfer-encoding: binary");
header("Content-length: ".filesize($path));
@readfile($path);
}


ps: die Codedarstellung im Forum hier sieht nicht sooo gut aus, könnte man vielleicht noch verbessern.

Grüsse aus Obwalden, CH
 
danke, dass du deine lösung geposted hast. ich werd sie mir bei bedarf mal anschaun.
smile.gif


QUOTE ps: die Codedarstellung im Forum hier sieht nicht sooo gut aus, könnte man vielleicht noch verbessern.

dies ist bereits geplant, könnte aber noch etwas dauern... für n einzelnen admin ist das fast n fulltime job mit nem neuen forum. aber ich werd ihm bei bedarf mal feuer unterm hintern machen.
biggrin.gif
 
Zurück
Oben