【问题标题】:PHP Module with incorrect compiled API (unable to initialize)带有错误编译 API 的 PHP 模块(无法初始化)
【发布时间】:2011-12-06 20:58:10
【问题描述】:

我正在尝试在 RHEL5 机器上安装 freetds 和 php-mssql。我已经成功地完成了(看起来是)一切。但是,当 PHP 尝试加载模块时出现以下错误:

PHP Warning:  PHP Startup: mssql: Unable to initialize module
Module compiled with module API=20090626, debug=0, thread-safety=0
PHP    compiled with module API=20050922, debug=0, thread-safety=0
These options need to match

我一直在绞尽脑汁想弄清楚为什么它们的价值观不同,但没有成功。

在最近的尝试中,我下载了我正在运行的版本(php-5.3.8)的 php 源,进入 ext/mssql 文件夹并运行 phpize、configure、make、make install。

我确认 mssql.so 文件在适当的文件夹中,并且 php 正在尝试加载它。

phpize -v
Configuring for:
PHP Api Version:         20050922
Zend Module Api No:      20090626
Zend Extension Api No:   220090626

【问题讨论】:

    标签: php sql-server


    【解决方案1】:

    RHEL 有旧版本的 php (5.1.x),安装较新的 php 版本(例如 5.3.x)意味着一些变化。如果您从非官方 repos 安装,您将看到名为 php-* 和 php5-* 的软件包。拥有两个版本可能是问题的根源。

    您的系统似乎正在访问以前的 php 安装中的一些配置文件。

    看看: - /etc/php.d 确保你没有旧版本的元素 - 查看 /usr/bin/php-config* ,如果您同时拥有 php-config 和 php-config5,请删除(重命名)/usr/bin/php-config 并创建指向新的符号链接:

    # mv /usr/bin/php-config /usr/bin/php-config_old
    # ln -s /usr/bin/php-config5 /usr/bin/php-config
    

    希望对你有帮助

    【讨论】:

    • 谢谢。我开始推测可能安装了两个版本的 php。我确实注意到 php-config 说 version="5.1.6",但 php -v 显示版本为 5.3.8。不存在 php-config5 文件。
    • 如果 /usr/bin 中不存在更新版本的 php-config,我在哪里可以找到它?我是否需要重新安装 php 5.3.8(这是 php 正在运行的)以复制 php-config?
    • 非常感谢,这让我很头疼。我试图在 osx 上设置 memcached,但一直遇到这个问题。最终,当我将 php、phpize 和 php-config 版本更正为 MAMP 提供的版本后,我使用 pecl 安装了“pecl install memcached”
    【解决方案2】:

    我可以确认,当一个模块因为不同的 API 而没有加载时,是因为旧的 php-config。然后你必须查看 /usr/bin/php-config 并用更新的版本覆盖它。

    【讨论】:

    • 谢谢大卫。您对如何进行有任何建议(参考对先前答案的评论)
    • @AndrewVogel:我在 php 文件夹中找到了新的 php-config,但我已经从 tarball 安装了 php。我认为旧的 php-config 来自像 apt-get 这样的远程安装。我在加速器上遇到了同样的问题。是这个意思吗?
    • 是的.. 哪个文件夹有新的 php-config?还是在您的 /usr/bin 文件夹中,如 jap1968 所示?如果我在任何地方都没有更新的 php-config,我想我唯一的选择是重新安装 php?
    • @AndrewVogel:php-5.3.8/scripts/php-config。我使用的是 tarball,我没有使用 RHEL,在我的 /usr/bin 中没有 php-config5。
    • 我也有同样的问题,但是 /usr/bin/ 只有一个 php-config 有什么建议吗?
    【解决方案3】:

    对于那些使用基于 debian 的发行版(例如 Ubuntu)的人,如果您安装了多个版本的 php,您还可以检查已设置的任何替代方案。

    快速确定已为与 php 相关的任何内容设置了哪些替代项的一种方法是ls -l /etc/alternatives/*php*

    示例输出:

    $ ls -l /etc/alternatives/*php*
    lrwxrwxrwx 1 root root 15 May 19 00:02 /etc/alternatives/php -> /usr/bin/php7.4
    lrwxrwxrwx 1 root root 19 Jan 28 18:50 /etc/alternatives/php-cgi -> /usr/bin/php-cgi7.4
    lrwxrwxrwx 1 root root 23 Jan 28 18:50 /etc/alternatives/php-cgi-bin -> /usr/lib/cgi-bin/php7.4
    lrwxrwxrwx 1 root root 35 Jan 28 18:50 /etc/alternatives/php-cgi.1.gz -> /usr/share/man/man1/php-cgi7.4.1.gz
    lrwxrwxrwx 1 root root 22 May 19 20:27 /etc/alternatives/php-config -> /usr/bin/php-config7.4
    lrwxrwxrwx 1 root root 38 May 19 20:27 /etc/alternatives/php-config.1.gz -> /usr/share/man/man1/php-config7.4.1.gz
    lrwxrwxrwx 1 root root 24 May 19 20:30 /etc/alternatives/php-fpm.sock -> /run/php/php8.0-fpm.sock
    lrwxrwxrwx 1 root root 31 May 19 00:02 /etc/alternatives/php.1.gz -> /usr/share/man/man1/php7.4.1.gz
    lrwxrwxrwx 1 root root 18 May 19 20:29 /etc/alternatives/phpdbg -> /usr/bin/phpdbg7.4
    lrwxrwxrwx 1 root root 34 May 19 20:29 /etc/alternatives/phpdbg.1.gz -> /usr/share/man/man1/phpdbg7.4.1.gz
    lrwxrwxrwx 1 root root 18 May 19 20:29 /etc/alternatives/phpize -> /usr/bin/phpize7.4
    lrwxrwxrwx 1 root root 34 May 19 20:29 /etc/alternatives/phpize.1.gz -> /usr/share/man/man1/phpize7.4.1.gz
    

    就我而言,我在安装了 7.4 之后安装了 php8。然后我需要切换回来,一半的选项仍然设置为 8。当我尝试启用我使用 pecl 安装的扩展时,我遇到了 OP 提到的问题。

    因此,例如,当从 php 8.0 切换回 7.4 时,如果其中一个替代方案的符号链接仍指向 8.0,例如php-fpm.sock,那么您将
    sudo update-alternatives --config php-fpm.sock 并选择数字选择匹配php7.4-fpm.sock(下例中为1)

    $ sudo update-alternatives --config php-fpm.sock 
    There are 2 choices for the alternative php-fpm.sock (providing /run/php/php-fpm.sock).
    
      Selection    Path                      Priority   Status
    ------------------------------------------------------------
    * 0            /run/php/php8.0-fpm.sock   80        auto mode
      1            /run/php/php7.4-fpm.sock   74        manual mode
      2            /run/php/php8.0-fpm.sock   80        manual mode
    
    Press <enter> to keep the current choice[*], or type selection number: 1
    

    【讨论】:

      猜你喜欢
      • 2018-08-24
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      相关资源
      最近更新 更多