PHP: вызов неопределенной функции gzdecode () - PullRequest
12 голосов
/ 21 марта 2012

Я получаю странное сообщение об ошибке со следующим фрагментом кода 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);
    }
}

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

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

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

UPDATE

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

Из информации 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 

Ответы [ 3 ]

18 голосов
/ 30 апреля 2012

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

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

function gzdecode($data) 
{ 
   return gzinflate(substr($data,10,-8)); 
} 
4 голосов
/ 21 марта 2012

Это не всегда установлено.Начиная с документации :

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

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

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

function gzdecode($data) { 
   return gzinflate(substr($data,10,-8)); 
} 
0 голосов
/ 17 февраля 2017

Функция gzdecode доступна с php 5.4 enter image description here

Мое любимое решение

Распаковать сжатый gzip http ответ

...