Mam problem, który wielokrotnie pojawiał się na SO, ale nie mogę znaleźć rozwiązania do mojego! Próbuję dostarczyć plik PDF do klienta bez otwierania go w przeglądarce, pobierania plików, ale jest uszkodzony, gdy go otworzę i brakuje sporo bajtów z oryginalnego pliku. Próbowałem już kilku takich metod pobierania pliku, ale pokażę ci tylko najnowsze, z których korzystałem i mam nadzieję, że otrzymam informację zwrotną.Wymuszenie pobrania pliku PDF, uszkodzony plik
Mam również otwarty pobrany plik PDF w edytorze tekstu i nie ma błędów PHP na górze tego, co widzę!
Jestem również świadomy, że readfile() jest znacznie szybszy, ale do celów testowych jestem zdesperowany, aby uzyskać wszystko działa, więc użyłem podejścia while (! Feof())!
wystarczająco Zresztą wędrówki, herezje kod (zaczerpnięte z 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);
również zauważyć, była różnica w wielkości pliku:
Original: 351,873 bytes
Downloaded: 329,163 bytes
Próbowałaś 'ReadFile()'? – barbashov
@ DavidC799: Jeśli chcesz przedyskutować odpowiedź na poprzednie pytanie, zostaw tutaj komentarz. Nie tylko upuść tutaj kod i powiedz nam "to nie działa". Pamiętaj, że tylko ktoś inny zaakceptował tę odpowiedź, to nie znaczy, że kod też musi działać dla ciebie. W celu testowania zredukuj kod do niezbędnego minimum, aby sprowokować problem. Na przykład. nie ma funkcji, po prostu na sztywno nazwaną nazwę pliku. Użyj pliku readfile. – hakre
@barbashov tak Próbowałem kilka różnych metod. – DavidC799