11.05.2007
Probleme beim Senden von Dateien per PHP
Sollte sich irgendjemand (außer mir Depp) mal fragen, warum es - in meinem Fall "plötzlich", nachdem es gerade noch vor der letzten Änderung ging - nicht mehr korrekt gelingt, eine Datei per PHP zu senden, obwohl der "gewollte Header" eigentlich prima aussieht, sollte mal nach Leerzeichen / Leerzeilen vor (und nach) dem PHP-Code suchen.
Dummerweise reicht ein einziges Leerzeichen vor dem einführenden "<?php" vollkommen aus, um die ganze Nummer zu versauen und einen text/html-Content zu generieren - egal, was der PHP-Code danach versucht, so dass die Datei nicht wie gewünscht gesendet, sondern statt dessen - je nach Dateityp mehr oder weniger sinnvoll - im Browser dargestellt wird.
<?php
//da oben steht es, das blöde Leerzeichen! Weg damit, schon klappt´s!
$userfile = "pfad/meine_lustige_datei.zip" ;
header("Content-Type: application/octet-stream") ;
header("Content-Length: " .(string)(filesize($userfile)) ) ;
header('Content-Disposition: attachment; filename="'.basename($userfile).'"') ;
header("Content-Transfer-Encoding: binary\n") ;
readfile($userfile) ;
?>
Also: Wenn ein ansonsten gut funktionierender Code wie dieser Folgende hier nicht in der Lage ist, eine Datei wie gewünscht zu senden, sondern diese im Browser anzeigt, mal besonders die erste Zeile nach führenden Leerzeichen durchsuchen. Spart ggf. viel Zeit, die ich heute durch sinnloses "Debugging auf gut Glück" verbraten habe 🙁