我正在尝试在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源码(php-5.3.8),进入了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
答案 0 :(得分:12)
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并对新的符号链接进行符号链接:< / p>
# mv /usr/bin/php-config /usr/bin/php-config_old
# ln -s /usr/bin/php-config5 /usr/bin/php-config
希望这有帮助
答案 1 :(得分:1)
我可以确认,当一个模块由于不同的API而没有加载时,因为旧的php-config。然后你必须查看/ usr / bin / php-config并用更新的版本覆盖它。
答案 2 :(得分:0)
对于那些使用基于 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