gzip在bash中对字符串进行编码/放气,然后在php中对字符串进行解码/充气

gzip在bash中对字符串进行编码/放气,然后在php中对字符串进行解码/充气,php,bash,gzip,Php,Bash,Gzip,我希望在bash中生成一个gzip字符串,然后将其发送到php脚本进行解码/膨胀。但是我遇到了一个问题,我认为是由gzip在bash中生成的gzip字符串 # from # https://stackoverflow.com/questions/7538846/un-decompress-a-string-in-bash#7539075 FOO="$(echo "Hello world" | gzip -c | base64)" # compressed, base64

我希望在bash中生成一个gzip字符串,然后将其发送到php脚本进行解码/膨胀。但是我遇到了一个问题,我认为是由gzip在bash中生成的gzip字符串

    # from 
    # https://stackoverflow.com/questions/7538846/un-decompress-a-string-in-bash#7539075
    FOO="$(echo "Hello world" | gzip -c | base64)" # compressed, base64 encoded data
    echo $FOO | base64 -d | gunzip # use base64 decoded, uncompressed data
    echo '--'

    # unpack base64 again before sending to php
    FOO="$(echo $FOO | base64 -d)"

    # this is where it goes wrong:
    # php doesn't seem to like the gzip string format.

    # gzuncompress produces:
    #   PHP Warning:  gzuncompress(): data error in Command line code on line 1
    php -r "echo gzuncompress('$FOO') . \"\n\";"
    echo '--'

    # gzdecode produces:
    #   PHP Warning:  gzdecode(): data error in Command line code on line 1
    php -r "echo gzdecode('$FOO') . \"\n\";"
    echo '--'

    # gzinflate produces:
    #   PHP Warning:  gzinflate(): data error in Command line code on line 1
    php -r "echo gzinflate('$FOO') . \"\n\";"
    echo '--'
我怀疑问题可能出在bash gzip格式上。
但我看不到任何可能纠正这一点的选项


感谢所有的想法。

如果我跑的话,gzip字符串在bash字符串中是不安全的

FOO="$(echo "Hello world" | gzip -c | base64)"
FOO="$(echo "$FOO" | base64 -d)"
我犯了一个错误

-bash: warning: command substitution: ignored null byte in input
但是如果我让字符串base64像这样使用/:

输出:

Hello world

如果将解码字符串的输出通过管道传输到PHP,也可以使用此方法:

FOO="$(echo "Hello world" | gzip -c | base64)"
echo "$FOO" | base64 -d | php -r 'echo gzdecode(file_get_contents("php://stdin"));'
(从标准DIN读取的示例取自)

FOO="$(echo "Hello world" | gzip -c | base64)"
echo "$FOO" | base64 -d | php -r 'echo gzdecode(file_get_contents("php://stdin"));'