在应用程序中,UTF8字符串通过zlib
进行压缩。
然后使用十六进制表示法将原始缓冲区转换为文本字符串。
这是以' blob ='发送的。通过GET
或POST
,取决于php脚本。
在php脚本中,完成以下操作:
$blob = eregi_replace( '[^0-9a-f]', '', $_GET['blob']);
if (!$blob) $blob = eregi_replace( '[^0-9a-f]', '', $_POST['blob']);
$binblob = hex2bin($blob);
$str = gzuncompress($binblob);
if ($blob)
{
mail("me@me.com", "[TEST]", $blob . " -> " . $str , "From:me@me.com");
}
这似乎运作良好,例如我得到了这个结果:
789c0bc9c82c5600a2448592d4e21200247304f6
- > This is a test
哪个是正确的,因为"这是一个测试" 是压缩的内容,bin2hex&ed以及发送到php脚本。
但是,我注意到每次在日志中都有一个警告,没有进一步说明原因。
PHP Warning: gzuncompress(): data error in .../test.php on line 6
任何人都知道为什么我每次都会收到警告?
修改
还试过:
$str = zlib_decode($binblob);
但结果是一样的。
我甚至尝试使用zlib-encode文档示例"Hello world"
。
应用程序构建完全相同的字符串:
789ccb48cdc9c95728cf2fca4901001a0b045d
但zlib_decode()
仍会向日志发出警告。结果字符串" Hello world"没关系。
我的临时解决方案是取消警告:
$errlevel = error_reporting() ;
error_reporting($errlevel & ~E_WARNING);
// $str = gzuncompress($binblob);
$str = zlib_decode($binblob); // Same result as gzuncompress($binblob);
error_reporting($errlevel);
但是未指明的警告让我感到不舒服