Функция PHP gzuncompress в node.js

Итак, у меня есть данные, сжатые с помощью метода PHP gzcompress: http://us2.php.net/manual/en/function.gzcompress.php

Как я могу декодировать эти данные из node.js ??

Я пробовал "compress", "zlib" и несколько других библиотек сжатия узлов, но, похоже, ни одна из них не распознает данные. Например, zlib выдает мне сообщение «Ошибка: неправильная проверка заголовка»

Ответ: Оказывается, лучше всего использовать zlib. У нас возникла дополнительная проблема с двоичными данными из кэша памяти. Если у вас есть двоичные данные в объекте буфера node.js, и вы вызываете toString () вместо .toString ('binary'), он получает все виды зашифрованных данных, когда что-то экранируется, или управляющие последовательности интерпретируются, или что-то еще. К сожалению, все плагины memcache, которые я пробовал на сегодняшний день, принимают строковые данные из memcache и не дисциплинированы относительно их правильной обработки.

Лучший модуль ZLIB, который я нашел:

https://github.com/kkaefer/node-zlib

// first run "npm install zlib", then...
var zlib = require('zlib');
var gz = zlib.deflate(new Buffer("Hello World", 'binary')); // also another 'Buffer'
console.log(zlib.inflate(gz).toString('binary'));

К вашему сведению, этот вопрос ОЧЕНЬ похож на связанный с ним вопрос о Java: Функция gzuncompress PHP в Java?


person Dave Dopson    schedule 12.08.2011    source источник


Ответы (2)


Кража из другого сообщения (Какой метод сжатия использовать в PHP?)

  • gzencode () использует полностью автономный формат gzip, такой же, как инструмент командной строки gzip.
  • gzcompress () использует необработанный формат ZLIB. Он похож на gzencode, но имеет другие данные заголовка и т. Д. Я думаю, он был предназначен для потоковой передачи.
  • gzdeflate () самостоятельно использует необработанный алгоритм DEFLATE, который является основой для обоих других форматов.

Таким образом, "zlib" будет правильным выбором. Это НЕ перекрестно совместимо с gzip.

Попробуйте https://github.com/kkaefer/node-zlib

person Dave Dopson    schedule 12.08.2011
comment
Обратите внимание, что node.js zlib включает inflateRaw (), поэтому вы можете работать с формами PHP с заголовком и без него. - person Brian H; 28.05.2014

php:

<?php 
$data = 'HelloWorld';
$gzcompress = gzcompress($data);
$gzcompress_base64_encode = base64_encode($gzcompress);
echo "Compressing: {$data}\n";
echo $gzcompress."\n";
echo $gzcompress_base64_encode."\n";
echo "--- inverse ---\n";
echo gzuncompress(base64_decode($gzcompress_base64_encode))."\n";

nodejs:

const zlib = require('zlib');
var data = 'HelloWorld';
var z1 = zlib.deflateSync( Buffer.from(data));

var gzcompress = z1.toString();
var gzcompress_base64_encode = z1.toString('base64');
console.log('Compressing '+data);
console.log(gzcompress);
console.log(gzcompress_base64_encode);
console.log('--- inverse ---');
console.log(zlib.inflateSync(Buffer.from(gzcompress_base64_encode,'base64')).toString());
person CloudFramework    schedule 25.12.2019