PHP: проблема с использованием Passthru, чтобы поток ZIP на Mac OS X только

StackOverflow https://stackoverflow.com/questions/3547414

  •  30-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь собрать решение по заказу на молнии с помощью использования Zip-команды Unix и функции PASSTHRU PHP, но я ударил заглох.

Сценарий выглядит что-то подобное:

<?php
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachement; filename=myfile.zip");
passthru("zip -r -0 - /stuff/to/zip/");
exit();
?>

Команда zip работает нормально, и выходной вывод принимается браузером и сохраняется в виде файла zip. Затем ZIP можно извлечь штраф на Windows и Unix, но на Mac OS X Создание в экстракторе (BomarchiveHelper) не может извлечь файл. Использование других приложений на OS X работает нормально.

Ошибка, заданная BomarchiveHelper, такая же, она дает, если ZIP защищен паролем (не обрабатывается приложением). Я использовал какую-то программу ZIP-анализатора, и она указывала, что некоторые файлы в архиве ZIP были помечены как защищены паролем. Как я уже сказал, однако никакие другие экстракционные приложения не обращают внимания на это, очевидно.

При обнаружении на молнии я обнаружил, что тот, который генерируется файлами PHP, - это несколько байтов, превышающих один, сгенерированный непосредственно с помощью команды zip на сервере. Похоже, что процесс потока с Passthru добавляет что-то в файл, который, вероятно, вызывает проблемы с BomarchiveHelper.

Чтобы проверить это, я использовал Passthru, чтобы поток ZIP я уже создал на сервере: Passthru («Cat Parts.zip»), который работал нормально с BomarchiveHelper.

Таким образом, проблема, похоже, лежит где-то в процессе, где функция Passthru принимает двоичные данные, сгенерированные на лету командой zip и передают это в браузере.

Я пытался устранить все источники, где можно сгенерировать дополнительные байты (настройка команды zip для тихого и т. Д.), Но добавленные данные все еще остаются. Двоичная разница потоковой почтовой почки и предварительно сгенерированной ZIP показывает, что дополнительные данные разбросаны по всему ZIP, а не только в конце или на начало.

У кого-нибудь есть подсказка или видели эту проблему до и решили, что невозможно решить?

NB: Поскольку кто-то еще уже столкнулся и очень хорошо описал эту проблему до меня без какого-либо ответа, я просто скопировал / вставку его сообщение здесь и убедился, что все его тесты эффективно провалились, и ни один из моих не прошел ...

По-видимому, единственный способ получить это на работу было бы попросить людей использовать либо расстегнуть или SustSitexpander ...

Это было полезно?

Решение

Если вы используете Nginx, то посмотрите на http://wiki.nginx.org/nginxngxzip.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top