Script de download do PHP cria um arquivo ZIP ilegível no Mac

Para referência, eu já li e tentei as respostas nestes e em vários outros tópicos:

Criando e servindo arquivos zipados com php

Abrindo arquivo zip baixado cria arquivo cpgz?

Eu tenho um arquivo zip no meu servidor.

Quando eu uso o Filezilla para mover esse arquivo Zip do meu servidor para o meu Mac, posso abri-lo normalmente.

Quando eu uso este código PHP para baixar o arquivo Zip para minha máquina Linux, ele abre normalmente.

Quando eu uso este código PHP para baixar o arquivo Zip para o meu Mac, usando o Safari ou Firefox, recebo um erro dizendo "Falha na descompactação" ou "A estrutura do arquivo está danificada" ou recebo um arquivo .cpgz - que acredito significa que o computador está fechando o arquivo, não o descompactando.

Aqui está o código PHP que estou usando para entregar o arquivo zip.

$zipname = "myfile.zip";
$zippath = "/path/to/" . $zipname;

      if ($downloadzip = fopen ($zippath, "r")) {
            $fsize = filesize($zippath);

            header("Content-type: application/zip");
            header("Content-Disposition: attachment; filename=\"".$zipname."\"");
            header("Content-length: $fsize");
            header('Content-Transfer-Encoding: binary');
            #header("Cache-control: private"); //use this to open files directly

            echo fpassthru($downloadzip); // deliver the zip file

        }
        fclose ($downloadzip);

Eu encontrei alguns cabeçalhos que funcionam. Eu realmente não sei ou me preocupo porque funciona, estou feliz que funcione ... Eu tentei uma tonelada de coisas diferentes, arquivos .htaccess, configurações do php.ini / zlib.

Aqui está a respostahttp://perishablepress.com/http-headers-file-downloads/

$zipName = 'myfile.zip';
$zipPath = 'mydirectory/' . $zipName;


    if (file_exists($zipPath)) {

        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-type: application/octet-stream");
        header("Content-Disposition: attachment; filename=\"".$zipName."\"");
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: ".filesize($zipPath));
        ob_end_flush();
        @readfile($zipPath);
}

questionAnswers(3)

yourAnswerToTheQuestion