如何在CentOS上安装PHP intl扩展?

36

我对安装软件包几乎一无所知。前段时间,我通过遵循一个非常具体的教程,使用yum成功安装了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扩展吗?

6个回答

42

由于您已从Remi存储库获得了php-common,因此您还需要从Remi获得php-intl。

请按以下方式添加--enable-repo选项:

yum --enablerepo=remi install php-intl

我无法进行测试,因为remi现在是PHP 5.4,而我还没有准备好升级。但答案是完全合理的,我认为当remi仍然是PHP 5.3.x时,它应该会产生预期的结果。 - toxalot
你说得对,我也收到了同样的错误信息,但是我使用的是PHP 5.4。 - Carlos Romero López
如果你正在使用 "多版本" 方法来管理 Remi 软件库,你需要执行的命令是 yum install php56-php-intl(将 56 替换为你选择的 PHP 版本)。 - rinogo

11

如果您使用更高版本的PHP,比如5.6,那么您需要启用remiremi-php56两个仓库来安装所有额外的依赖项:

yum --enablerepo=remi,remi-php56 install php-intl

如果您正在使用“多版本”方法来管理Remi存储库,您需要的命令是yum install php56-php-intl(将您选择的版本替换为“56”)。 - rinogo

2

for php 7.0 using

#list all options    
$ sudo yum list php7*intl

#install
$ sudo yum install php70-intl

2
我成功地通过以下步骤使用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++
这对我有用。我的php版本是5.6.12。

1
不要使用已不推荐且已过时的 PECL 扩展,因为它现在已合并到 php-src 中。所有 PHP 包的提供者都有它。如果您可以安装 php-devel,则也可以从同一源安装 php-intl。 - Remi Collet
对于CentOS 8,请使用dnf而不是yum。 - Zohaib Yunis

1

由于我们试图将多个软件包更新到冲突的版本,因此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包
引用来自Super User上类似问题的答案。“尝试删除所有Remi php包,禁用Remi存储库并安装默认的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) 降级 php-common 版本至 5.3.3-14

yum downgrade php-common

我不知道是否会遇到更多依赖问题,需要降低其他软件包的版本。这里有更多细节。

https://www.centos.org/modules/newbb/viewtopic.php?topic_id=40567&forum=56

其他 Stack Exchange 网站显示类似的问题。

https://serverfault.com/search?q=centos+error+package (370 个结果)

https://unix.stackexchange.com/search?q=centos+error+package (57 个结果)


0
稍微详细解释一下@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。它将在php 8.1的模块目录中弹出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接