我对安装软件包几乎一无所知。前一段时间,我按照一个非常具体的教程,通过百胜安装了Zend Framework 1。
现在我需要PHP intl扩展,但我不知道如何安装它
我做了
yum list php*intl
看到有一个可用的。所以我做了
yum install php-intl
并得到以下错误消息:
Error: Package: php-intl-5.3.3-14.el6_3.x86_64 (updates)
Requires: php-common = 5.3.3-14.el6_3
Installed: php-common-5.3.17-2.el6.remi.x86_64 (@remi)
php-common = 5.3.17-2.el6.remi
Available: php-common-5.3.3-3.el6_2.8.x86_64 (base)
php-common = 5.3.3-3.el6_2.8
Available: php-common-5.3.3-14.el6_3.x86_64 (updates)
php-common = 5.3.3-14.el6_3
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
我没有尝试消息中提到的建议,因为我不知道它们会做什么,我害怕破坏一些东西。这是一台生产机器,我没有其他机器可以测试。我试图找到一个与我的PHP版本相同的rpm来下载,但没有成功。
这两个建议有什么作用?它们是否安全?我还可以尝试安装intl扩展吗?
由于您有来自remi存储库的php commom,您还需要从remi获得php-intl。
添加--enable-repo
选项如下:
yum --enablerepo=remi install php-intl
如果你有更高的PHP版本,比如5.6,你必须同时启用remi
和remi-php56
repo来安装所有额外的依赖项:
yum --enablerepo=remi,remi-php56 install php-intl
我使用以下步骤通过pecl成功安装了INTL。
1) 安装icu&libs:
yum -y install icu libicu libicu-devel
2) php-devel包和phpize:
yum -y install php-devel phpize
3) 当然还有gcc:
yum -y install gcc gcc-cpp gcc-c++
这适用于me.my php版本为5.6.2
php 7.0使用
#list all options
$ sudo yum list php7*intl
#install
$ sudo yum install php70-intl
Yum抛出一个错误,因为我们试图将多个包更新到冲突的版本。您的yum输出表明php-intl需要一个特定版本的php-common。清除所有垃圾:
Requires 5.3.3-14
Installed 5.3.17-2
Available 1st Option: 5.3.3-3
Available 2nd Option: 5.3.3-14
这告诉我们,您已经安装了比php-intl允许的更新版本的php-common(5.3.17-2)。
我认为你有两种选择。(作为一个新手,如果不在开发环境中练习,我不会尝试这些。)
1) 删除remi包
引用了超级用户上的一个类似问题。"尝试删除所有remi-php包,禁用remi-repository并安装默认的centos 6 php 5.3.3包。"
https://superuser.com/questions/505340/centos-6-how-to-install-php-mysql-when-php-common-remi-is-present
2) 降级5.3.3-14版通用php
yum downgrade php-common
我不知道你是否会遇到更多的依赖性问题,不得不降级其他包。我在这里找到了更多的细节。
https://www.centos.org/modules/newbb/viewtopic.php?topic_id=40567&论坛=56
其他Stack Exchange网站也出现了类似的问题。
https://serverfault.com/search?q=centos+错误+包(370个结果)
https://unix.stackexchange.com/search?q=centos+错误+包(57个结果)
详细介绍一下@Fernando Valler的回答。
在我的Fedora 35机器上,我安装了多个php。为了检查有多少,我使用Symfony的工具(我不知道如何这么快做到这一点):
$ symfony local:php:list
+---------+--------------------------+---------+
| Version | Directory | PHP |
+---------+--------------------------+---------+
| 7.4.30 | /opt/remi/php74/root/usr | bin/php |
| 8.0.22 | /usr | bin/php |
| 8.1.10 | /opt/remi/php81/root/usr | bin/php |
+---------+--------------------------+---------+
假设我错过了8.1.10版本的intl
。首先检查intl.so
是否确实不在其模块目录php81 -r "echo ini_get('extension_dir');"
中。
要安装它,请通过dnf list php*intl
检查软件包,您会得到以下内容:
$sudo dnf list php*intl
Installed Packages
php-intl.x86_64 8.0.22-1.fc35 @updates
Available Packages
php-intl.x86_64 8.0.23-1.fc35 updates
php-symfony-intl.noarch 2.8.52-7.fc35 fedora
php-symfony3-intl.noarch 3.4.49-2.fc35 fedora
...
php72-php-intl.x86_64 7.2.34-11.fc35.remi remi
php81-php-intl.x86_64 8.1.10-1.fc35.remi remi
php82-php-intl.x86_64 8.2.0~rc2-15.fc35.remi remi
选择您需要的内容,例如php8.1.10
,并为其安装intl扩展:sudo dnf install php81-php-intl
。它将在php8.1的模块目录中弹出。