Может ли PHP распаковать файл, сжатый с помощью класса .NET GZipStream? - PullRequest
2 голосов
/ 25 мая 2009

У меня есть приложение C #, которое взаимодействует с веб-службой SOAP на основе PHP для обновления и лицензирования.

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

Моя текущая мысль - использовать встроенное сжатие gzip .NET для сжатия текстового файла, преобразования в base64, отправки в веб-сервис и преобразования PHP-скрипта в двоичный код и распаковки данных.

Может ли PHP распаковать данные, сжатые с помощью GZipStream, и если да, то как?

Ответы [ 5 ]

6 голосов
/ 25 мая 2009

Я действительно попробовал это. GZipStream не работает. С другой стороны, сжатие с помощью DeflateStream на стороне .NET и распаковка с помощью gzinflate на стороне PHP работают. Ваш пробег может варьироваться ...

1 голос
/ 25 мая 2009

Если библиотеки уровня http реализуют его (и клиент, и сервер), http поддерживает gzip-сжатие , и в этом случае не было бы никакой причины что-либо сжимать вручную. Прежде чем рисковать, вам следует проверить, происходит ли это уже.

0 голосов
/ 25 мая 2009

Я недавно написал статью, в которой показано, как сжимать / распаковывать в C #. Я использовал это для почти того же сценария. Я хотел перенести файлы журнала с клиента на сервер, и они часто были довольно большими. Однако в моем случае мой веб-сервис работал в .NET, поэтому я мог использовать метод распаковки. Но похоже, что PHP поддерживает метод gzdecode, который будет работать.

http://coding.infoconex.com/post/2009/05/Compress-and-Decompress-using-net-framework-and-built-in-GZipStream.aspx

0 голосов
/ 25 мая 2009

Поскольку сервер принимает веб-запросы, вам действительно следует проверить заголовки HTTP, чтобы определить, принимает ли какой-либо клиент кодировку GZIP, а не просто угадывать и разбирать каждый раз.

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

0 голосов
/ 25 мая 2009

Да, PHP может распаковывать сжатые строки GZIP с заголовками или без них.

  • gzdecode для формата файла GZIP (т.е. совместим с gzip)
  • gzinflate для "сырого" формата DEFLATE
  • gzuncompress для формата ZLIB (формат GZIP без некоторой информации заголовка)

Я не знаю точно, какой из них вам нужен, поскольку я не знаком с .NET GZipStream. Это немного похоже на gzuncompress, поскольку формат ZLIB является своего рода «потоковым» форматом, но попробуйте все три.

...