RubyのZlibで圧縮したデータをBase64にして、PHPのスクリプトにPOSTで渡すってことをやっていたのですが、圧縮データを展開できる時と、できない時があって悩んでしまった。
よくよく調べると、そもそもBase64をデコード出来ていなかった。それで調べてみると、PHPのドキュメントの下に書いてありました。
PHP: base64_decode – Manual
どうやら、POSTでデータを渡すと、Base64の「+」記号が勝手にスペースに変換されてしまうらしい。
以下のように修正したところ無事に動きました。
## str_replace でスペースを+に置換 $data = base64_decode(str_replace(' ', '+', $data)); ## ヘッダ分を差し引いてあげないとだめなのね・・・ $_data = gzinflate(substr($data, 10, -8));
ちなみにRuby側です。
Zlib::MAX_WBITSに+16を足すと、前後に圧縮データ情報も付加されたGZIP形式になるそうです。
z = Zlib::Deflate.new Zlib::BEST_COMPRESSION, Zlib::MAX_WBITS + 16 param = [z.deflate(data, Zlib::FINISH)].pack('m') z.close
ありがとう。本当にありがとう。
かなり悩んでいたことが解決できました。
本当にありがとう。
2日はまったのが解決しました
ありがとー!!