Uma maneira recomendada de lidar com downloads de arquivos via PHP (ou qualquer outro script) é usando o chamado cabeçalho de resposta 'X-Sendfile'.
O script PHP lida com a autenticação e, uma vez validado, definirá alguns cabeçalhos de resposta junto com um 'X-Sendfile' que informa ao servidor web para entregar um arquivo; o script termina e o servidor web assume.
Veja aqui um exemplo simples:
http://www.jasny.net/articles/how- i-php-x-sendfile/