Abrir el archivo zip descargado crea un archivo cpgz?

Si hago el url para un archivo zip elhref de un enlace y haga clic en el enlace, mi archivo zip se descarga y, al abrirlo, obtiene el contenido como esperaba.

Aquí está ese HTML:

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

El problema es que me gustaría que el enlace apunte a mi aplicación para poder determinar si el usuario está autorizado para acceder a este archivo zip.

así que me gustaría que mi HTML fuera este:

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

y mi PHP para el/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");
}   

Entonces, creo que el problema tiene que ver con laheader() código, pero he probado un montón de cosas relacionadas con eso en base a varias sugerencias de Google y otras SO, y ninguna funciona.

Si responde mi pregunta, es probable que también pueda responder esta pregunta:Archivo comprimido con resultados PHP en archivo cpgz después de la extracción

Respuestas a la pregunta(6)

Su respuesta a la pregunta