用 yum 和 pear 安装 php-soap 都失败了

Posted

技术标签:

【中文标题】用 yum 和 pear 安装 php-soap 都失败了【英文标题】:Installing php-soap with yum and pear both fail 【发布时间】:2015-03-08 03:08:24 【问题描述】:

我正在尝试在 Centos 6.4 服务器上安装 php 的 SOAP 扩展。我对包管理器相当不熟悉,从 CLI 安装包并在 PHP 中配置它们。我相当有能力管理 php.ini 和其他 PHP 配置文件(soap.ini 等)。

我已尝试使用以下命令安装它:

yum install php-soap

但这给了我以下错误:

yum install php-soap
Loaded plugins: downloadonly, fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
drivesrvr                                                                                                                                                                                                |  951 B     00:00     
Resolving Dependencies
There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.
The program yum-complete-transaction is found in the yum-utils package.
--> Running transaction check
---> Package php-soap.x86_64 0:5.3.3-40.el6_6 will be installed
--> Processing Dependency: php-common(x86-64) = 5.3.3-40.el6_6 for package: php-soap-5.3.3-40.el6_6.x86_64
--> Running transaction check
---> Package php-common.x86_64 0:5.3.3-40.el6_6 will be installed
--> Processing Conflict: php54-common-5.4.36-1.ius.el6.x86_64 conflicts php-common < 5.4
--> Finished Dependency Resolution
Error: php54-common conflicts with php-common-5.3.3-40.el6_6.x86_64
 You could try using --skip-broken to work around the problem
** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows:
cloud-init-0.7.5-10.el6.centos.2.x86_64 has missing requires of PyYAML

注意这个问题:

Error: php54-common conflicts with php-common-5.3.3-40.el6_6.x86_64

如果我列出我已安装的所有 PHP 相关包,我会得到:

yum list installed | grep php
php-php-gettext.noarch             1.0.11-3.el6                       @epel     
php-tcpdf.noarch                   6.1.1-1.el6                        @epel     
php-tcpdf-dejavu-sans-fonts.noarch 6.1.1-1.el6                        @epel     
php54.x86_64                       5.4.36-1.ius.el6                   @ius      
php54-bcmath.x86_64                5.4.36-1.ius.el6                   @ius      
php54-cli.x86_64                   5.4.36-1.ius.el6                   @ius      
php54-common.x86_64                5.4.36-1.ius.el6                   @ius      
php54-devel.x86_64                 5.4.36-1.ius.el6                   @ius      
php54-gd.x86_64                    5.4.36-1.ius.el6                   @ius      
php54-mbstring.x86_64              5.4.36-1.ius.el6                   @ius       
php54-mcrypt.x86_64                5.4.36-1.ius.el6                   @ius      
php54-mysql.x86_64                 5.4.36-1.ius.el6                   @ius      
php54-pdo.x86_64                   5.4.36-1.ius.el6                   @ius      
php54-pear.noarch                  1:1.9.5-2.ius.el6                  @ius      
php54-pecl-apc.x86_64              3.1.13-2.ius.el6                   @ius      
php54-pecl-memcache.x86_64         3.0.8-1.ius.el6                    @ius      
php54-suhosin.x86_64               0.9.37-1.ius.el6                   @ius      
php54-tidy.x86_64                  5.4.36-1.ius.el6                   @ius      
php54-xml.x86_64                   5.4.36-1.ius.el6                   @ius      
phpMyAdmin.noarch                  4.0.10.7-1.el6                     @epel     

我也尝试使用 pear 安装 SOAP 扩展:

sudo pear install SOAP-0.13.0

这声称扩展安装成功:

WARNING: "pear/HTTP_Request" is deprecated in favor of "pear/HTTP_Request2"
Did not download optional dependencies: pear/Mail, pear/Mail_Mime, pear/Net_DIME, use --alldeps to download automatically
WARNING: "pear/Net_URL" is deprecated in favor of "pear/Net_URL2"
pear/SOAP can optionally use package "pear/Mail"
pear/SOAP can optionally use package "pear/Mail_Mime"
pear/SOAP can optionally use package "pear/Net_DIME"
downloading SOAP-0.13.0.tgz ...
Starting to download SOAP-0.13.0.tgz (85,945 bytes)
....................done: 85,945 bytes
downloading HTTP_Request-1.4.4.tgz ...
Starting to download HTTP_Request-1.4.4.tgz (17,109 bytes)
...done: 17,109 bytes
downloading Net_URL-1.0.15.tgz ...
Starting to download Net_URL-1.0.15.tgz (6,303 bytes)
...done: 6,303 bytes
downloading Net_Socket-1.0.14.tgz ...
Starting to download Net_Socket-1.0.14.tgz (5,600 bytes)
...done: 5,600 bytes
install ok: channel://pear.php.net/Net_URL-1.0.15
install ok: channel://pear.php.net/Net_Socket-1.0.14
install ok: channel://pear.php.net/HTTP_Request-1.4.4
install ok: channel://pear.php.net/SOAP-0.13.0

但是,尽管在我的 php.ini SOAP 中添加了“extension=soap.so”行,但我的 phpinfo() 中仍然没有出现。从命令行运行“php -v”或“pear info SOAP-0.13.0”时,我也收到以下错误:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/soap.so' - /usr/lib64/php/modules/soap.so: cannot open shared object file: No such file or directory in Unknown on line 0

在“/usr/lib64/php/modules/”或服务器上的其他任何地方似乎没有soap.so文件,我使用以下方法检查过:

cd /
find -name soap.so

我已经卸载并重新安装了几次,每次都一样。

谁能解释为什么这两种方法都失败了?如果需要,很乐意提供更多详细信息。

【问题讨论】:

您安装了混合的 CentOS/EPEL/IUS php 软件包。这可能不是一个好主意。您可以尝试将 php-common 替换为 php54-common 并查看是否有帮助(可能还有其他软件包也需要类似的处理)。 您好@EtanReisner 感谢您的回复,我在 linux 服务器管理和包管理方面不太了解,我只是继承了这台服务器,我最初没有设置它。你能告诉我EPEL和IUS包有什么区别吗?它与存储库/维护者有关吗?无论哪种方式,除非我弄错了,否则我已经安装了 php54-common 包,因此原始 yum 错误和我的 'yum list 的第 7 行已安装 | grep php' 结果:php54-common.x86_64 5.4.36-1.ius.el6 [at]ius EPELIUS 是不同的软件包存储库(不同的维护者、不同的版本、不同的 QA/等实践)。 EPEL 是一个 Fedora 项目。我对IUS 一无所知。啊,确实是安装了php54-common,我看错了。这可能意味着您正在尝试安装需要 php-common 而不是 php54-common 的 CentOS 或 EPEL php-soap 软件包。 php54-soap 包是否可以从 IUS 获得? 嗨@EtanReisner 做了一个'yum list | grep ^php54' 我可以看到有一个 php54-soap 包,它已按预期安装。在我的 PHP .ini 文件中包含 'extension=soap.so' 行并重新启动 Web 服务器后,我现在可以在我的 phpinfo() 输出中看到 SOAP 包的详细信息。非常感谢您的帮助,我会根据您的cmets回答我自己的问题。 【参考方案1】:

根据上面@EtanReisner 的cmets,我现在已经能够成功安装SOAP 包了。

问题是我混合了来自 EPEL 和 IUS 存储库的 PHP 包。从上面可以看出

yum list installed | grep php

这些 PHP 包大部分来自 IUS 存储库,看起来我尝试使用的 php-soap 包安装

yum install php-soap

是一个基于 EPEL 的包,因此冲突在 php-common 文件中突出显示。根据上面的建议,我已经运行了以下

yum list | grep ^php54

其中的结果包含更合适的基于 IUS 的 PHP SOAP 包:

php54-soap.x86_64                         5.4.36-1.ius.el6              ius   

已经卸载了我最初尝试留下的任何失败的 SOAP 包安装,然后我运行

yum 安装 php54-soap

第一次安装没有问题。

对于这个问题的第二部分,关于为什么基于 PEAR 的包管理器无法成功安装包,我没有找到任何解决方案。

【讨论】:

以上是关于用 yum 和 pear 安装 php-soap 都失败了的主要内容,如果未能解决你的问题,请参考以下文章

如何安装软件包 mail 和 mail_mime (pear)

linux-php5.6-安装sftp扩展

安装PEAR

PECL PEAR php扩展模块的简便安装方式

Windows下获取和安装PEAR包管理器 Getting and installing the PEAR package manager

Linux安装pear包