2014-01-12 172 views
9

這是我的服務器配置:pecl_http加載失敗

  • CentOS版本6.5(最終)
  • PHP 5.5.7
  • pecl_http 2.0.4穩定
  • Server版本:阿帕奇/ 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知道你正在使用你的Web服務器,其php.ini文件,並添加擴展= http.so在正確的位置。這幫助了我,所以也許它會幫助你!

+3

還要確保propro和raphf在http加載之前加載否則會出錯。 – Jubair

+1

我在http之前有propro和raphf擴展,仍然不起作用。使用pecl_http-1.7.6確實有效,耶! – NateS

+0

我總是得到'梨配置集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 in Unknown 0行 '。已經搜索,但沒有找到工作解決方案。也許你更瞭解? – kwoxer

16

由於版本2 PECL HTTP需要在http之前加載模塊raph​​f和propro。所以編輯你的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

+2

這是正確的解釋和正確的解決方案。 – crishoj

0

當談到從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有助於縮小軟件包的範圍)。

我提到這一點,希望它能幫助其他人在類似系統上遇到同樣的問題。我對CentOS存儲庫的軟件包名稱不是100%,儘管通常所需的軟件包名稱可能會幫助您和其他人縮小列表範圍。

一旦安裝了軟件包,只需卸載&重新安裝pecl_http軟件包,重新啓動php5-fpm,錯誤應該消失;通過創建phpinfo文件進行確認。

0

我想擴展傑克米勒的答案。我使用的是OpenSUSE,它將extension = ******。放入/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 

當然,它加載它們通過一個使用水珠,這意味着他們得到的字母順序加載一個,你猜對了 - raphf.ini加載後http.ini。

重命名raphpf.ini類似a_raphf.ini的竅門。