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

警告:gzdecode():php中的数据错误,php,gzip,Php,Gzip,我知道这个问题已经问过了,但我不能解决我的问题,所以我在这里解释了我的问题,请帮助我解决这个问题 我使用file_get_contens()从这个示例URL获取数据 我使用gzencode压缩响应数据,因为数据太长,并添加了前缀以供参考 然后我将压缩数据保存到数据库中 $arrayResponse['URL1'] = '_|_coMpResSed_|_' . gzencode($response1); $arrayResponse['URL2'] = '_|_coMpResSed_|_' . g

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

我使用file_get_contens()从这个示例URL获取数据

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

$arrayResponse['URL1'] = '_|_coMpResSed_|_' . gzencode($response1);
$arrayResponse['URL2'] = '_|_coMpResSed_|_' . gzencode($response2);
$arrayResponse['URL3'] = '_|_coMpResSed_|_' . gzencode($response3);
数据库详细信息

  • 存储引擎:InnoDB
  • 排序规则:utf8mb4\u unicode\u 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():数据错误<代码>在线$arrayResponse['URL2']=gzdecode($temp2[1])`


其他线路工作正常。我不知道我在哪里犯错。有谁能帮我弄到这个吗?

有同样的问题,我刚刚看了一下Mysql文档:

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


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

有同样的问题,我只是查看了Mysql文档:

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


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

您正在覆盖$temp2。很抱歉,我现在编辑的是$temp3而不是$temp2。您应该使用BLOB类型-但一个重要的问题是如何从数据库插入和检索数据?是否有一些值被转义而没有被转义?测试了您的代码,它运行良好。可能您的数据在保存到db或从db中提取时被损坏。我将每个数据存储到db中的每一行,并从db中按每一行获取数据。。。字符集或排序规则有问题吗?您正在覆盖$temp2。很抱歉,我现在编辑的是$temp3而不是$temp2。您应该使用BLOB类型-但一个重要的问题是如何从数据库插入和检索数据?是否有一些值被转义而没有被转义?测试了您的代码,它运行良好。可能您的数据在保存到db或从db中提取时被损坏。我将每个数据存储到db中的每一行,并从db中按每一行获取数据。。。字符集或排序规则有问题吗?
$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     
}