警告:gzdecode():php中的数据错误

时间:2016-03-16 07:07:02

标签: php gzip

我知道这个问题已经问过了,但我无法解决我的问题,所以我在这里解释了我的问题,请帮助我解决这个问题。

我通过使用file_get_contens()

从此示例网址获取数据
$URL1 = 'abcd.com/xxx';
$URL2 = 'abcd.com/yyy';
$URL3 = 'abcd.com/zzz';

$response1 = file_get_contents($URL1);
$response2 = file_get_contents($URL2);
$response3 = file_get_contents($URL3);

我使用gzencode压缩响应数据,因为数据太长,并为我的参考添加了前缀 然后我将压缩数据保存到DB

$arrayResponse['URL1'] = '_|_coMpResSed_|_' . gzencode($response1);
$arrayResponse['URL2'] = '_|_coMpResSed_|_' . gzencode($response2);
$arrayResponse['URL3'] = '_|_coMpResSed_|_' . gzencode($response3);

数据库详情

  • 存储引擎:InnoDB
  • 整理:utf8mb4_unicode_ci
  • 类型:longblob或longtext(我都试过)

我使用gzdecode

解压缩数据
$temp1 = explode('_|_coMpResSed_|_', $arrayResponse['URL1']);
$temp2 = explode('_|_coMpResSed_|_', $arrayResponse['URL2']);
$temp3 = explode('_|_coMpResSed_|_', $arrayResponse['URL3']);

if (!empty($temp1[1]) && !empty($temp2[1]) && !empty($temp3[1])) {
    $arrayResponse['URL1'] = gzdecode($temp1[1]);//working fine 
    $arrayResponse['URL2'] = gzdecode($temp2[1]);// getting warning 
    $arrayResponse['URL3'] = gzdecode($temp3[1]);//working fine     
}

我正在接受`警告:

  

gzdecode():数据错误on line $ arrayResponse ['URL2'] = gzdecode($ temp2 [1]);`

其他线路工作正常。我不知道我在哪里犯错误。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

遇到同样的问题,我刚看了一下Mysql doc: https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html

许多加密和压缩函数返回结果可能包含任意字节值的字符串。如果要存储这些结果,请使用具有 VARBINARY BLOB 二进制字符串数据类型的列。这将避免可能会更改数据值的尾随空格删除或字符集转换的潜在问题,例如,如果使用非二进制字符串数据类型(CHAR,VARCHAR,TEXT),则可能会出现此问题。

我只是将列数据类型更改为VARBINARY,一切正常。