python से php - php, पायथन से zlib.decompress बदलें

मैं एक अजगर कोड को php में बदलना चाहता हूं।

मेरी समस्या यह रेखा है (अजगर):

zlib.decompress( $gzipped, 16 + zlib.MAX_WBITS );

मैं php में zlib.MAX_WBITS नहीं जानता

मेरा कोड (php में):

$response = gzuncompress( $gzipped, ??? );

उत्तर:

जवाब के लिए 0 № 1

प्रतिक्रिया के बाद संपादित किया गया उत्तर

यह एक परेशानी का एक सा है, लेकिन आप इसे PHP के साथ कर सकते हैं संपीड़न फिल्टर

$params = array("window" => 31);
$fp = fopen("your_data", "rb");
stream_filter_append($fp, "zlib.inflate", STREAM_FILTER_READ, $params);
print fread($fp, 1024);

एकमात्र समस्या यह है कि आपको संपीड़ित डेटा को एक स्ट्रीम से स्रोत करने की आवश्यकता है ... मैं "कोई PHP लड़का नहीं हूं इसलिए मैं आपको यह पता लगाने के लिए छोड़ दूंगा।

PHP> = 5.4.0 के लिए नीचे मूल उत्तर

संक्षिप्त जवाब: प्रयत्न gzdecode() या zlib_decode() के बजाय gzuncompress()

लंबा जवाब...

अजगर में (अजगर 3):

>>> print(zlib.decompress.__doc__)
decompress(string[, wbits[, bufsize]]) -- Return decompressed string.

Optional arg wbits is the window buffer size.  Optional arg bufsize is
the initial output buffer size.
>>> print(zlib.MAX_WBITS)
15
>>> print(16 + zlib.MAX_WBITS)
31

इसका तात्पर्य यह है कि डेटा मूल रूप से 31 के विंडो आकार का उपयोग करके संकुचित किया गया था। PHP में अधिकांश zlib फ़ंक्शन के लिए डिफ़ॉल्ट विंडो का आकार 15 है, इसलिए gzuncompress() तथा gzinflate() असफल। हालाँकि, ऐसा लगता है gzdecode() तथा zlib_decode() काम करो (मैं वास्तव में नहीं जानता "डॉन" क्यूं कर):

Python3 का उपयोग करके संपीड़ित करें

>>> import zlib
>>> compressor = zlib.compressobj(wbits=(16+zlib.MAX_WBITS))
>>> compressed = compressor.compress(b"Here is a test string compressed by Python with a window size of 31n")
>>> compressed += compressor.flush()
>>> compressed
b"x1fx8bx08x00x00x00x00x00x00x03rxcaxb1rx800x0cx04xc0x9e)~x05xc4x12x94xacx00xe4!.x12#xdbx92x15xa6x87xaboxa5x11xe2xd8x11xf4x80x87Ixbfqj{x8cxee,8x06xb6x11U;Rxa2xfe/xa5x17Mxb8xbcx84^Xxe6xe9x03xabEVxdbDx00x00x00"
>>> open("/tmp/compressed", "wb").write(compressed)
85

PHP का उपयोग कर Decompress

php > $compressed = file_get_contents("/tmp/compressed");
php > print gzuncompress($compressed);
PHP Warning:  gzuncompress(): data error in php shell code on line 1
php > print gzinflate($compressed);
PHP Warning:  gzinflate(): data error in php shell code on line 1
php > print gzdecode($compressed);
Here is a test string compressed by Python with a window size of 31
php > print zlib_decode($compressed);
Here is a test string compressed by Python with a window size of 31

संबंधित सवाल
सबसे लोकप्रिय