Ho un problema che è aumentato molte volte in SO, ma non riesco a trovare la soluzione per il mio! Sto cercando di consegnare un file pdf al client senza che si apra nel browser, il file viene scaricato ma è corrotto quando lo apro e mancano alcuni byte dal file originale. Ho provato diversi metodi per scaricare il file, ma ti mostrerò solo l'ultimo che ho usato e spero di ricevere un feedback.Force Download di un file PDF, file corrotto
Ho anche aperto il PDF scaricato in un editor di testo e non ci sono errori di php in cima a quello che posso vedere!
Sono anche consapevole del fatto che readfile() è molto più veloce ma a scopo di test sono disperato per far funzionare qualsiasi cosa quindi ho usato l'approccio while (! Feof())!
comunque abbastanza sconnesso, ecco il codice (tratto da 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);
anche sottolineare è stata la differenza di dimensione del file:
Original: 351,873 bytes
Downloaded: 329,163 bytes
Hai provato 'readfile()'? – barbashov
@ DavidC799: Se vuoi discutere la risposta di una domanda precedente, lascia un commento lì. Non solo inserire qui un codice e dirci "non funziona". Tenete a mente, solo qualcun altro ha accettato quella risposta, non deve significare che il codice deve funzionare anche per voi. E per scopi di test, si prega di ridurre il codice al minimo indispensabile per provocare il problema. Per esempio. nessuna funzione, solo un nome di file hardcoded. Usa readfile. – hakre
@barbashov sì, ho provato diversi metodi. – DavidC799