В том, что вы пытаетесь сделать, есть много неправильных вещей, наиболее значимо:
- Вы не можете редактировать zip-файл, не повредив его: это обычно определяется по его контрольной сумме, и о поврежденном файле будет сообщено.
echo $contents
(или другие варианты расширения) заменит любую последовательность символов пробела одним пробелом.- Обратные косые черты будут возникать в сжатых данных, а также в индексе файла, поэтому замена их приведет к дальнейшему повреждению файла.
Наиболее удовлетворительным ответом является использование кроссплатформенного архиватора, такого как 7-Zip, который будет сохранять архив с общими разделителями каталогов и будет расширяться в собственном формате для платформы, где он вызывается.
В Windows я использую версию Portable Apps, которую можно запускать через интерфейс PortableApps Suite или напрямую из ее каталога; Портативная версия содержит как 32-, так и 64-битные сборки и включает 7z.exe
интерфейс командной строки (который может использовать DLL из той же директории).
Не понятно, почему в ваших логах PK
должно было быть заменено магическое число, но я бы предположил, что ответные символы, символы пробела или escape-символы могут объяснить это. Как рекомендует Камиль Мачоровский в своем комментарии, уточнит, xxd
что происходит.