Ich habe ein Problem, das viele Male auf SO gestiegen ist, aber ich kann nicht scheinen, die Lösung zu mir zu finden! Ich versuche, eine pdf-Datei an den Client zu liefern, ohne dass es im Browser geöffnet wird, die Datei wird heruntergeladen, aber es ist beschädigt, wenn ich es öffne und mir einige Bytes aus der Originaldatei fehlen. Ich habe mehrere solcher Methoden ausprobiert, um die Datei herunterzuladen, aber ich werde Ihnen nur das Neueste zeigen, das ich benutzt habe und hoffentlich ein Feedback bekommen.Erzwingen Herunterladen einer PDF-Datei, beschädigte Datei
Ich habe auch die heruntergeladene PDF in einem Texteditor geöffnet und es gibt keine PHP-Fehler an der Spitze, die ich sehen kann!
Ich bin mir auch bewusst, dass readfile() ist viel schneller, aber zu Testzwecken bin ich verzweifelt, um alles funktioniert so dass ich die while (! Feof()) Ansatz verwendet!
Auf jeden Fall genug Wandern, heres der Code (aus why my downloaded file is alwayes damaged or corrupted?):
$file = __DIR__ . '/reports/somepdf.pdf';
$basename = basename($file);
$length = sprintf("%u", filesize($file));
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $basename . '"');
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $length);
ob_clean();
set_time_limit(0);
readfile($file);
auch zu beachten, war der Unterschied in der Dateigröße:
Original: 351,873 bytes
Downloaded: 329,163 bytes
Haben Sie versucht, 'readfile()'? – barbashov
@ DavidC799: Wenn Sie die Antwort einer früheren Fragen diskutieren möchten, hinterlassen Sie einen Kommentar dort. Nicht einfach hier einen Code eingeben und uns sagen "es funktioniert nicht". Denken Sie daran, dass nur jemand anderes diese Antwort akzeptiert hat, es darf nicht bedeuten, dass der Code auch für Sie funktionieren muss. Und zu Testzwecken reduzieren Sie bitte den Code auf das Nötigste, um das Problem zu provozieren. Z.B. keine Funktion, nur ein fest codierter Dateiname. Verwenden Sie readfile. – hakre
@barbashov ja ich habe verschiedene Methoden ausprobiert. – DavidC799