Подтвердить что ты не робот

PHP: вызов функции undefined 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);
    }
}

В основном я пытаюсь загрузить текстовый контент из gzip файла. Я получаю следующую ошибку:

Fatal error: Call to undefined function gzdecode() in ...\sites\MyScripts\fw2.php on line 80

Тем не менее, когда я смотрю документация, мне кажется, что мне не нужно включать дополнительную библиотеку, или я ошибочно? Как я могу решить эту проблему?

UPDATE

Следуя question, чтобы проверить, установлена ​​ли эта библиотека на моем ПК, да, это так.

Из информации PHP:

enter image description here

Итак, это становится все более запутанным...

ОБНОВЛЕНИЕ 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 
4b9b3361

Ответ 1

Он не всегда устанавливается. Из документация:

Поддержка Zlib в PHP не включена по умолчанию. Вам нужно будет настроить PHP --with-zlib [= DIR]

В версии Windows для PHP есть встроенная поддержка этого расширения. Вам не нужно загружать дополнительные расширения, чтобы использовать эти функции.

edit: Поскольку это уже принятый ответ, я отредактировал его, чтобы добавить функцию, предложенную в качестве замены.

function gzdecode($data) { 
   return gzinflate(substr($data,10,-8)); 
} 

Ответ 2

gzdecode недоступен, если PHP не соответствует zlib. По некоторым данным, он будет включен в PHP 6. Обратите внимание на то, как почти все функции предоставили номер версии PHP, когда он стал/доступен. Как ни странно, они не считают необходимым отображать предупреждающее сообщение.

Попробуйте этот код (работает для меня) для gzdecode без контрольных сумм:

function gzdecode($data) 
{ 
   return gzinflate(substr($data,10,-8)); 
}