Force Downloading a PDF file, corrupt file

corrupt, file, force-download, php

Solution

Make sure you're not running any compression output buffering handlers, such as ob_gzhandler. I had a similar case and I had to disable output buffering for this to work properly

Problem

I've got a problem that has risen many times on SO, but I can't seem to find the solution to mine! I'm trying to deliver a pdf file to the client without it opening in the browser, the file downloads but it is corrupt when I open it and is missing quite a few bytes from the original file. I've tried several such methods for downloading the file but I'll just show you the latest I've used and hopefully get some feedback. I have also opened the downloaded PDF in a text editor and there are no php errors at the top of it that I can see! I'm also aware that readfile() is much quicker but for testing purposes I am desperate to get anything working so I used the while(!feof()) approach! Anyway enough rambling, heres the code (taken from 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); ``` Also to note was the difference in file size: ``` Original: 351,873 bytes Downloaded: 329,163 bytes ```

Original source

Related problems