Criando e servindo arquivos zipados com php

Eu estou tentando usar o seguinte código para criar um arquivo zip de um diretório e servi-lo para o usuário através de um download 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);

Eu sou capaz de criar o arquivo zip, mas baixá-lo através de http não está funcionando. Se eu baixar o arquivo zip que é criado usando um cliente FTP, então o Stuffit Expander do Mac descompacta os arquivos, mas se eu baixá-lo por http, o unzipper do Mac cria um loop infinito. O que quero dizer com isso é dizer que o arquivo que eu baixei é chamado course.zip, depois descompactando o arquivo dá course.zip.cpgz e descompactando aquele arquivo dando course.zip novamente ... e assim por diante.

Alguém tem alguma ideia?

Obrigado!

questionAnswers(4)

yourAnswerToTheQuestion