Abrindo arquivo zip baixado cria arquivo cpgz?

Se eu fizer a URL de um arquivo zip,href de um link e clique no link, meu arquivo zip é baixado e abri-lo recebe o conteúdo como eu esperava.

Aqui está esse HTML:

<a href="http://mysite.com/uploads/my-archive.zip">download zip</a>

O problema é que gostaria que o link apontasse para meu aplicativo, de modo que eu pudesse determinar se o usuário está autorizado a acessar esse arquivo zip.

então eu gostaria que meu HTML fosse assim:

 <a href="/canDownload">download zip</a> 

e meu PHP para o/canDownload página:

//business logic to determine if user can download

if($yesCanDownload){

$archive='https://mysite.com/uploads/my-archive.zip';
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=".basename($archive));
header("Content-Length: ".filesize($archive));
ob_clean();
flush();
echo readfile("$archive");
}   

Então, acho que o problema tem a ver com oheader() código, mas eu tentei um monte de coisas relacionadas a isso com base em vários google e outras sugestões de SO e nenhum trabalho.

Se você responder minha pergunta, é provável que você possa responder a esta pergunta também:Arquivo zipado com resultados do PHP no arquivo cpgz após a extração

questionAnswers(6)

yourAnswerToTheQuestion