PHP Download Script Tworzy nieczytelny plik ZIP na Macu

Dla porównania przeczytałem już i wypróbowałem odpowiedzi w tych i kilku innych wątkach:

Tworzenie i serwowanie spakowanych plików za pomocą php

Otwarcie pobranego pliku zip tworzy plik cpgz?

Mam plik zip na moim serwerze.

Kiedy używam Filezilli, aby przenieść ten plik Zip z mojego serwera na mojego Maca, mogę go normalnie otworzyć.

Kiedy używam tego kodu PHP do pobrania pliku Zip na mój komputer z Linuksem, otwiera się on normalnie.

Kiedy używam tego kodu PHP do pobrania pliku Zip do mojego Maca, używając Safari lub Firefox, pojawia się błąd mówiący „Nieudana dekompresja” lub „Struktura archiwum jest uszkodzona” lub otrzymuję plik .cpgz - który, jak sądzę, oznacza, że ​​komputer rozpakowuje plik, nie rozpakowując go.

Oto kod PHP, którego używam do dostarczenia pliku 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);

Znalazłem kilka nagłówków, które działają. Naprawdę nie wiem, dlaczego to działa, cieszę się, że to działa ... Próbowałem wielu różnych rzeczy, plików .htaccess, ustawień php.ini / zlib.

Oto odpowiedź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);
}

questionAnswers(3)

yourAnswerToTheQuestion