如何在CentOS上安装PHP intl扩展


How do I install PHP intl extension on CentOS?

我对安装软件包几乎一无所知。前一段时间,我按照一个非常具体的教程,通过百胜安装了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,你必须同时启用remiremi-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的模块目录中弹出。