Creando y sirviendo archivos comprimidos con php

Estoy intentando usar el siguiente código para crear un archivo zip desde un directorio y entregarlo al usuario a través de una descarga http:

 // write the file
file_put_contents($path . "/index.html", $output);

// zip up the contents
chdir($path);
exec("zip -r {$course->name} ./");

$filename = "{$course->name}.zip";

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' .urlencode($filename));
header('Content-Transfer-Encoding: binary');

readfile($filename);

Puedo crear el archivo zip, pero descargarlo en http no funciona. Si descargo el archivo zip creado con un cliente ftp, entonces Stuffit Expander de Mac descomprime los archivos sin problemas, pero si lo descargo a través de http, el descompresor de mac crea un bucle sin fin. Lo que quiero decir con esto es que el archivo que descargo se llama course.zip, luego, al descomprimirlo, se obtiene course.zip.cpgz y al descomprimirlo, se vuelve a marcar course.zip ... y así sucesivamente.

¿Alguien tiene alguna idea?

¡Gracias!

Respuestas a la pregunta(4)

Su respuesta a la pregunta