Я работаю над проектом, где веб-сервер Windows, на котором работает PHP, обменивается данными по очень медленному соединению с внутренним сервером Linux, на котором выполняется приложение, написанное на C ++.Поскольку соединение между двумя компьютерами очень медленное, я хотел бы сжать трафик, перемещающийся между ними.
Я попал туда, где могу сжать строку, сохранить ее в файл, прочитать файли распакуйте строку в C ++, используя Zlib, и аналогично в PHP.Однако, если я пытаюсь сжать строку на одном языке и распаковать ее на другом (как это будет происходить в реальном мире), я получаю сообщение об ошибке, что сжатые данные повреждены.Я также заметил, что одна и та же строка, сжатая в C ++, приводит к другому файлу, чем в PHP, что позволяет мне полагать, что Zlib использует разные алгоритмы сжатия на каждом языке.
Я использую настройки по умолчаниюс обеих сторон.C ++, который я использую для сжатия и распаковки:
compress((Bytef*)compressed, (uLongf*)&compressedLength, (Bytef*)uncompressed, (uLong)uncomressedLength);
uncompress((Bytef*)uncompressed, (uLongf*)&uncomressedLength, (Bytef*)compressed, (uLong)compressedLength);
, а код PHP -
$compressed = gzcompress($uncompressed);
$uncompressed = gzuncompress($compressed);
Почему это приводит к различным сжатым строкам?Это то, что вызывает проблемы с декомпрессией?Что я должен сделать, чтобы заставить это работать?Кроме того, я не предан Злибу.Zlib - это то, что открыло мое первоначальное исследование, но если есть лучший способ сделать это, у меня все на слух.
Edit : На самом деле, после небольшого дополнительного тестирования, кажется, что C ++работал с моим первоначальным тестовым примером, но не универсально.Я попытался сделать это с помощью ввода "hellohellohello", и при распаковке он сообщил о Z_DATA_ERROR и распаковал его просто "hello".Я предполагаю, что это означает, что я делаю что-то не так на стороне C ++, что может объяснить, почему PHP недоволен распаковкой сжатых строк C ++.
Edit 2 : я опробовал пример zpipe.cпрограмма, и она правильно распаковывает строки, сжатые PHP и создает сжатые строки, которые PHP может распаковать.Очевидно, что проблема (ы) существуют в моем коде C ++.Либо я использую сжатие и распаковку неправильно, либо я неправильно читаю и пишу файл.Ни программы сжатия, ни распаковки не взаимодействуют корректно с zpipe.
Обновление : я теперь дошел до того, где могу сжать строку с помощью PHP и прочитать ее с помощью PHP или C ++, и яможет сжать строку с C ++ и прочитать ее с C ++, но попытка чтения с помощью PHP приводит к PHP Предупреждение: gzuncompress (): ошибка данных.Что может быть другим, что могло бы привести к такой комбинации рабочих / не рабочих сценариев?