Есть ли способ проверить, является ли строка gzdeflated?
то есть, тест на то, могу ли я безопасно gzinflate строку.
Если мои сжатые данные были подделаны, я получаю предупреждение "плохие данные". Я не хочу подавлять предупреждение, которое означает, что я должен либо поймать его, либо проверить, что он может быть gzinflated. Последнее-мое предпочтительное решение, но я просто не знаю, как это сделать.
что-то, чтобы соответствовать образцу кода ниже, было бы идеально:
if(i_can_haz_inflate($data))
{
// go ahead
$source = gzinflate($data);
}
else
{
// bad data
}
Edit: указав GZ (de|in)flate, я приходите к пониманию, что я на самом деле не слишком беспокоюсь об алгоритме сжатия. Есть ли там какие-либо, которые лучше подходят для проверки целостности перед попыткой декомпрессии?
2 ответов
gzinflate()
возвращает исходную строку, если это не gzdeflate()
закодированную строку.
наиболее очевидной проверкой было бы:
$deflated = @gzinflate($data); // to avoid getting a warning
if ($data != $deflated && $deflated !== FALSE) {
$source = gzinflate($data);
}
Я не думаю, что есть другой способ сделать это.
Я согласен с @Vlad Preda ответ, но мы можем преобразовать предупреждение исключение:
set_error_handler(function ($code, $description) {
throw new \RuntimeException($description, $code);
});
$deflated = gzinflate($data);
restore_error_handler();
и он предоставляет нам возможность обрабатывать исключения... и не подавляйте предупреждения...