Tôi gặp sự cố đã tăng lên nhiều lần trên SO, nhưng dường như tôi không thể tìm ra giải pháp để khai thác! Tôi đang cố gắng để cung cấp một tập tin pdf cho khách hàng mà không có nó mở trong trình duyệt, tải tập tin nhưng nó bị hỏng khi tôi mở nó và thiếu một vài byte từ tập tin gốc. Tôi đã thử một số phương pháp như vậy để tải về các tập tin nhưng tôi sẽ chỉ cho bạn thấy mới nhất tôi đã sử dụng và hy vọng nhận được một số thông tin phản hồi.Force Tải xuống tệp PDF, tệp bị hỏng
Tôi cũng đã mở tệp PDF đã tải xuống trong trình chỉnh sửa văn bản và không có lỗi php nào ở trên cùng mà tôi có thể thấy! Tôi cũng biết rằng readfile() là nhanh hơn nhiều nhưng với mục đích thử nghiệm, tôi tuyệt vọng để có được bất cứ điều gì làm việc vì vậy tôi sử dụng phương pháp (! Feof()) trong khi!
Dù sao đủ lan man, heres mã (lấy từ 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);
Cũng cần lưu ý là sự khác biệt về kích thước tập tin:
Original: 351,873 bytes
Downloaded: 329,163 bytes
Bạn đã thử 'readfile() '? – barbashov
@ DavidC799: Nếu bạn muốn thảo luận về câu trả lời của một câu hỏi trước, vui lòng để lại nhận xét ở đó. Không chỉ thả ở đây một số mã và nói với chúng tôi "nó không hoạt động". Hãy ghi nhớ, chỉ có ai đó khác chấp nhận câu trả lời đó, điều đó không có nghĩa là mã phải làm việc cho bạn. Và cho mục đích thử nghiệm, vui lòng giảm mã xuống mức tối thiểu để kích hoạt vấn đề. Ví dụ. không có chức năng, chỉ là một tên tệp được mã hóa cứng. Sử dụng readfile. – hakre
@barbashov vâng tôi đã thử một số phương pháp khác nhau. – DavidC799