2014-01-12 5 views
9

Это моя конфигурация сервера: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 

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

ответ

18

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

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


у меня не было проблемой настройки - по крайней мере, не к моему знанию. Я запускаю 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 в правильном месте. Это помогло мне, возможно, это тоже поможет!

+3

Также убедитесь, что propro и raphf загружены до того, как HTTP загрузится, иначе вы получите сообщение об ошибке. – Jubair

+1

У меня были propro и raphf расширения до http, все равно не получится. Использование pecl_http-1.7.6 действительно работало, yay! – NateS

+0

Я всегда получаю 'pear config-set php_ini /etc/php7.0/fpm/php.ini PHP Предупреждение: запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib/php/20151012/http.so' - /usr/lib/php/20151012/http.so: undefined symbol: php_resource_factory_handle_ctor в Unknown on line 0 '. Уже искали, но не нашли рабочего решения. Может быть, вы знаете больше? – kwoxer

16

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

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

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

+2

Это правильное объяснение и правильное решение. – crishoj

0

Когда дело доходит до установки из PECL или груши, я тоже всегда кажется, что бегу в к «нечто», что мешает модуль от работы по мере необходимости. Вышеприведенная ошибка на самом деле довольно распространена на 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.

0

Я хотел бы расширить ответ Джека Миллера. Я использую 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 делает трюк.

Смежные вопросы