PHP Download Script создает нечитаемый ZIP файл на Mac

Для справки, я уже прочитал и попробовал ответы в этих и нескольких других темах:

Создание и обслуживание сжатых файлов с помощью php

Открытие загруженного zip-файла создает файл cpgz?

У меня есть почтовый файл на моем сервере.

Когда я использую Filezilla для перемещения этого файла Zip с моего сервера на мой Mac, я могу открыть его как обычно.

Когда я использую этот PHP-код для загрузки Zip-файла на мою Linux-машину, он открывается нормально.

Когда я использую этот код PHP для загрузки Zip-файла на мой Mac с помощью Safari или Firefox, я получаю сообщение об ошибке "Сбой декомпрессии " или же "Структура архива повреждена » или я получаю файл .cpgz - что, по моему мнению, означает, что компьютер архивирует файл, а не разархивирует его.

Вот код PHP, который я использую для доставки 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);

Я нашел несколько заголовков, которые работают. Я неЯ действительно не знаю и не волнуюсь, почему это работает, я просто счастлив, что это работает ... Я пробовал кучу разных вещей, файлов .htaccess, настроек php.ini / zlib.

Вот'ответhttp://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);
}

Ответы на вопрос(3)

Ваш ответ на вопрос