PHP: Вызов неопределенной функции gzdecode()
Я получаю странное сообщение об ошибке со следующим фрагментом кода PHP (я не эксперт по PHP):
if ( $file_loc != NULL ) {
if ( file_exists($file_loc) ) {
printf(" file exists");
$handle = fopen($file_loc, "rb");
$contents = fread($handle, filesize($file_loc));
fclose($handle);
$result = gzdecode($contents);
}
}
Я в основном пытаюсь загрузить текстовое содержимое из файла gzipped. Я получаю следующую ошибку:
Fatal error: Call to undefined function gzdecode() in ...\sites\MyScripts\fw2.php on line 80
Тем не менее, когда я просматриваю документацию , мне не кажется, что мне нужно будет включать дополнительную библиотеку, или я ошибаюсь? Как я могу решить эту проблему?
ОБНОВЛЕНИЕ
Следуя другому вопросу , чтобы проверить независимо от того, установлена ли эта библиотека на моем компьютере, ответ - да, это так.
Из информации PHP:
Так что это становится все более и более запутанным...
ОБНОВЛЕНИЕ II
Я пробовал:
<?php
echo phpversion().", ";
if (function_exists("gzdecode")) {
echo "gzdecode OK, ";
} else {
echo "gzdecode no OK, ";
}
if (extension_loaded('zlib')) {
echo "zlib extension loaded ";
} else {
echo "zlib extension not loaded ";
}
?>
И я получаю:
5.2.17, gzdecode no OK, zlib extension loaded
3 answers
Он не всегда устанавливается. Из документации:
Поддержка Zlib в PHP по умолчанию не включена. Вам нужно будет настроить PHP--with-zlib[=DIR]
Версия PHP для Windows имеет встроенную поддержку этого расширения. Вам не нужно загружать какие-либо дополнительные расширения, чтобы использовать эти функции.
Редактировать: Поскольку это все еще принятый ответ, я отредактировал его, чтобы добавить функцию, предложенную в качестве замены.
function gzdecode($data) {
return gzinflate(substr($data,10,-8));
}
Gzdecode недоступен, если PHP не соответствует zlib. Согласно некоторым источникам, он, возможно, будет включен в PHP 6. Обратите внимание в руководстве, как почти все функции дали номер версии PHP, когда он стал/доступен. Как ни странно, они не считают, что это необходимо для отображения предупреждающего сообщения.
Попробуйте этот код (работает для меня) для gzdecode без контрольных сумм:
function gzdecode($data)
{
return gzinflate(substr($data,10,-8));
}