有没有办法测试一个字符串是否是gzdeflated?

时间:2013-01-17 11:43:06

标签: php compression

也就是说,测试我是否可以安全地gzinflate字符串。

如果我的压缩数据被篡改,我会收到“错误数据”警告。我不想压制警告,这意味着我要么必须陷阱,要么测试它可以被gzinflated。后者是我的首选解决方案,但我不知道如何。

适合下面的代码示例的东西将是完美的:

if(i_can_haz_inflate($data))
{
    // go ahead
    $source = gzinflate($data);
}
else
{
    // bad data
}

编辑:指定了gz(de | in)flate后我才意识到我实际上并不太关心压缩算法。在解压缩尝试之前是否有更适合检查完整性的内容?

3 个答案:

答案 0 :(得分:5)

gzinflate()返回原始字符串,如果它不是gzdeflate()编码的字符串。

最明显的检查是:

$deflated = @gzinflate($data); // to avoid getting a warning
if ($data != $deflated && $deflated !== FALSE) {
     $source  = gzinflate($data);
}

我认为没有其他方法可以做到这一点。

答案 1 :(得分:2)

我同意@Vlad Preda answer,但我们可以将警告转换为例外:

li

它为我们提供了处理异常的能力......并且不禁止警告......

答案 2 :(得分:0)

是否存在用于gzdeflated文件的已知魔术头,甚至有一些程序可以在不处理完整数据的情况下将其检出?