【问题标题】:pecl_http failed to loadpecl_http 加载失败
【发布时间】:2014-01-31 09:54:45
【问题描述】:

这是我的服务器配置:

  • CentOS 6.5 版(最终版)
  • 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

我试图到处寻找,但没有运气。安装似乎很好,但我不知道它有什么问题。

【问题讨论】:

    标签: php centos pecl


    【解决方案1】:

    我带着同样的问题来到这里 - 我无法让 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) 后一切正常!


    额外帮助:

    在安装之前 - 并且 pear 已安装 - 您可能希望运行这两个命令,假设您在 fpm 中使用 php.ini - 或者您可以根据您的配置编写路径:

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

    这样 pecl 就可以知道您在 Web 服务器上使用的是哪个 php.ini 文件,并将 extension=http.so 添加到正确的位置。这对我有帮助,所以也许它也会对你有所帮助!

    【讨论】:

    • 还要确保在 http 加载之前加载 propro 和 raphf,否则会出错。
    • 我在 http 之前有 propro 和 raphf 扩展,但仍然无法正常工作。使用 pecl_http-1.7.6 确实有效,耶!
    • 我总是收到pear config-set php_ini /etc/php7.0/fpm/php.ini PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/http.so' - /usr/lib/php/20151012/http.so: undefined symbol: php_resource_factory_handle_ctor in Unknown on line 0 。已经搜索但没有找到可行的解决方案。也许你知道更多?
    【解决方案2】:

    从版本 2 PECL HTTP 开始,需要在 http 之前加载模块 raphf 和 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

    【讨论】:

    • 这是正确的解释,也是正确的解决方案。
    • 这节省了我的一天
    【解决方案3】:

    当谈到从 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 文件来确认。

    【讨论】:

      【解决方案4】:

      我想扩展 Jack Miller 的答案。我正在使用 OpenSUSE,它将 extension=******.so 加载程序放入 /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 就可以了。

      【讨论】:

        猜你喜欢
        • 2015-06-24
        • 2014-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-04
        • 2019-07-03
        • 2020-10-26
        • 2013-02-08
        相关资源
        最近更新 更多