RubyのZlibで圧縮したデータをBase64にして、PHPのスクリプトにPOSTで渡すってことをやっていたのですが、圧縮データを展開できる時と、できない時があって悩んでしまった。
よくよく調べると、そもそもBase64をデコード出来ていなかった。それで調べてみると、PHPのドキュメントの下に書いてありました。
PHP: base64_decode - Manual
どうやら、POSTでデータを渡すと、Base64の「+」記号が勝手にスペースに変換されてしまうらしい。
以下のように修正したところ無事に動きました。
PHP
## 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件)
ありがとう。本当にありがとう。かなり悩んでいたことが解決できました。本当にありがとう。
2日はまったのが解決しました ありがとー!!
コメントを投稿
コメントは承認後に公開されます。メールアドレスは公開されません。