pecl_http не удалось загрузить

Это моя конфигурация сервера:

  • Выпуск CentOS 6.5 (Final)
  • PHP 5.5.7
  • pecl_http 2.0.4 стабильный
  • Версия сервера: Apache / 2.2.15 (Unix)

У меня все работает и работает, за исключением тех случаев, когда я пытался загрузить модуль pecl_http он дает мне следующее предупреждение и не загружается:

 PHP Warning: PHP Startup: Unable to load dynamic library '/path/to/php/modules/http.so' - /path/to/php/modules/http.so: undefined symbol: php_persistent_handle_abandon in Unknown on line 0 

Я старался смотреть повсюду, но без везения. Установка кажется прекрасной, но я не знаю, что с ней не так.

Я пришел сюда с той же проблемой – я не мог получить 2.0.4 для работы – в надежде помочь вам или другим, которые спотыкаются здесь, я приглашаю вас посмотреть мой ответ на serverfault здесь .

Для вашего удобства я также скопировал его ниже:


У меня не было проблемы с настройкой – по крайней мере, до моего сведения. Я запускаю nginx + php5-fpm. Мой файл php.ini был правильно настроен, и все мои другие расширения работали правильно – протестируйте его с помощью phpinfo () или php -ini.

Моя проблема с pecl_http (HttpRequest) была версией расширения (2.0.4). Проверьте свою версию, запустив в командной строке

 pecl list 

Мне не удалось заставить pecl_http-2.0.4 работать, но я смог запустить

pecl uninstall pecl_http

тогда

pecl install pecl_http-1.7.6 . Убедитесь, что у вас установлен libcurl, или вы можете столкнуться с ошибками установки.

После перезагрузки php5-fpm и моего веб-сервера (nginx) все работало префектно!


ДОПОЛНИТЕЛЬНАЯ ПОМОЩЬ:

Перед установкой – и груша установлена ​​- вы можете запустить эти две команды, предположив, что используете php.ini в fpm – или вы можете написать путь в соответствии с вашей конфигурацией:

 pear config-set php_ini /etc/php5/fpm/php.ini pecl config-set php_ini /etc/php5/fpm/php.ini 

Это делает так, что pecl знает, какой файл php.ini вы используете с вашим веб-сервером, и добавит расширение = http.so в нужное место. Это помогло мне, возможно, это тоже поможет!

Поскольку версия 2 PECL HTTP требует, чтобы модули raphf и propro загружались до http. Поэтому отредактируйте свои php.ini или php.d / pecl_http.ini или загрузите модули, чтобы он выглядел так:

  extension=raphf.so extension=propro.so extension=http.so 

Источник: http://www.php.net/manual/en/http.install.php#113769

Когда дело доходит до установки из PECL или PEAR, я тоже, похоже, всегда сталкиваюсь с «чем-то», что мешает работе модуля как следует. Вышеприведенная ошибка на самом деле довольно распространена на Ubuntu & Debian.

Пакеты, предоставляемые Ubuntu & Debian, автоматически не устанавливают все зависимости, необходимые для каждого модуля, поэтому мне пришлось искать решение между StackExchange, Google и веб-сайтом разработчиков.

Что исправлено для меня (обратите внимание: на Debian , а не CentOS) была установка следующих пакетов:

 php5-phpdbg php5-dev php-http zlib1g-dev libcurl4-openssl-dev libevent-dev imagemagick libmagick++-dev imagemagick-common libmagic-dev libghc-iconv-dev libpcre3-dev 

Пакет, помеченный как только php-http, является намеренным. Этот конкретный пакет не имеет 5, поэтому, если вы не знаете, что вам нужно, вы, скорее всего, не заметите этого. Поэтому для тех, кто работает в системах Ubuntu и / или Debian, поиск на php5 и php (с использованием –names-only помогает сузить пакеты).

Я упоминаю об этом в надежде, что это поможет другим, которые могут иметь такую ​​же проблему в подобной системе. Я не на 100% имен пакетов для репозитория CentOS, хотя имена пакетов, необходимых в целом, могут помочь вам и другим сузить список.

После установки пакетов просто удалите и переустановите пакет pecl_http, перезапустите php5-fpm и ошибка должна исчезнуть; подтверждается созданием файла phpinfo.

Я хотел бы расширить ответ Джека Миллера. Я использую OpenSUSE, и он добавляет расширение = ******. Поэтому загрузчики загружаются в /etc/php5/conf.d, разделенные на несколько файлов. Например:

 ctype.ini debug.ini exif.ini http.ini imagick.ini mbstring.ini mysqli.ini opcache.ini pdo.ini pdo_sqlite.ini raphf.ini tokenizer.ini xmlreader.ini xsl.ini curl.ini dom.ini gd.ini iconv.ini json.ini memcache.ini mysql.ini openssl.ini pdo_mysql.ini propro.ini sqlite3.ini xdebug.ini xmlwriter.ini zlib.ini 

Естественно, он загружает их один за другим с помощью glob, что означает, что они загружаются в алфавитном порядке, и вы догадались об этом – raphf.ini загружается после http.ini.

Переименование raphpf.ini что-то вроде a_raphf.ini делает трюк.