Sending correct file size with PHP download script

Originally from http://paul.luminos.nl/update/471:

The CrimsonBase website verifies downloads by passing them through a robust PHP script similar to the one published by Andrew Johnson in his article about PHP-controlled file downloads.

Andrew makes a very important comment at the end of the article:

“If you compress files with Zlib, mod_deflate and so on the Content-Length header won’t be accurate so you’ll end up seeing “Unknown size” and “Unknown time remaining” when downloading files.”

I would like to stress this: if your browser doesn’t appear to be obeying the headers generated by your PHP script—especially Content-Length—it is fairly likely that Apache’s mod_deflate extension is enabled.

You can easily disable it for a single script using the following line in an applicable .htaccess file:

SetEnvIfNoCase Request_URI ^/download\.php no-gzip dont-vary

where download.php is here assumed to be in the download script located in the server’s root directory path (e.g. www.crimsonbase.com/download.php). (That’s because the regular expression is ^/download\.php.)

Leave a Comment