9

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

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

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

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

编辑:在指定 gz(de|in)flate 之后,我开始意识到我实际上并不太关心压缩算法。有没有更适合在尝试减压之前检查完整性的方法?

4

2 回答 2

6

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

最明显的检查是:

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

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

于 2013-01-17T11:53:53.590 回答
2

我同意@Vlad Preda 的回答,但我们可以将警告转换为异常:

set_error_handler(function ($code, $description) {
    throw new \RuntimeException($description, $code);
});
$deflated = gzinflate($data);
restore_error_handler();

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

于 2016-02-09T15:38:43.453 回答