CentOS PHP 7.4升级pecl/pear包时出错
CentOS 7.6 我已经在5.x版本和7.2版本上运行了相同的过程,但在7.4版本中,一些pear/pecl步骤失败了,因为我现在正在尝试从7.2升级迁移 在配置过程中,我从pecl运行timezonedb升级,并遇到错误:CentOS PHP 7.4升级pecl/pear包时出错,php,centos,centos7,pear,pecl,Php,Centos,Centos7,Pear,Pecl,CentOS 7.6 我已经在5.x版本和7.2版本上运行了相同的过程,但在7.4版本中,一些pear/pecl步骤失败了,因为我现在正在尝试从7.2升级迁移 在配置过程中,我从pecl运行timezonedb升级,并遇到错误: [root@d9471f6a1ab2 /]# pear upgrade -c pecl.php.net timezonedb downloading timezonedb-2019.3.tgz ... Starting to download timezonedb-20
[root@d9471f6a1ab2 /]# pear upgrade -c pecl.php.net timezonedb
downloading timezonedb-2019.3.tgz ...
Starting to download timezonedb-2019.3.tgz (413,166 bytes)
....................................................................................done: 413,166 bytes
5 source files, building
running: phpize
Can't find PHP headers in /usr/include/php
The php-devel package is required for use of this command.
ERROR: `phpize' failed
因此,我自然会尝试安装它要求的包php-devel
,但它试图将我现有的一些包降级回php5.4
yum install php-devel
...
Error: php73-cli conflicts with php-cli-5.4.16-46.1.el7_7.x86_64
Error: php73-common conflicts with php-common-5.4.16-46.1.el7_7.x86_64
构建php运行时的正常过程包括安装timezonedb
pecl包,并在配置过程中对其进行升级。这个过程在以前所有的PHP升级中都没有太大的改变,但是我在php7.4上遇到了一些问题
完整软件包列表包含在下面,但最重要的是,我安装了以下软件包:
php74 php-pear
php74 php-devel
下面是yum-list-installed-php*
[root@d9471f6a1ab2 /]# yum list installed php*
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirror.fileplanet.com
* epel: mirror.prgmr.com
* extras: mirror.hostduplex.com
* remi-safe: mirrors.mediatemple.net
* updates: repos.lax.quadranet.com
Installed Packages
php-cli.x86_64 5.4.16-46.1.el7_7 @updates
php-common.x86_64 5.4.16-46.1.el7_7 @updates
php-devel.x86_64 5.4.16-46.1.el7_7 @updates
php74-php-bcmath.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-cli.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-common.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-devel.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-fpm.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-gd.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-intl.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-json.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-mbstring.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-opcache.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-pdo.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-pear.noarch 1:1.10.10-4.el7.remi @remi-safe
php74-php-pecl-geoip.x86_64 1.1.1-11.el7.remi @remi-safe
php74-php-pecl-igbinary.x86_64 3.1.0-1.el7.remi @remi-safe
php74-php-pecl-imagick.x86_64 3.4.4-6.el7.remi @remi-safe
php74-php-pecl-msgpack.x86_64 2.1.0~beta1-1.el7.remi @remi-safe
php74-php-pecl-redis5.x86_64 5.1.1-1.el7.remi @remi-safe
php74-php-pecl-xdebug.x86_64 2.9.0-1.el7.remi @remi-safe
php74-php-pecl-zip.x86_64 1.15.5-1.el7.remi @remi-safe
php74-php-pgsql.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-process.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-soap.x86_64 7.4.1-1.el7.remi @remi-safe
php74-php-xml.x86_64 7.4.1-1.el7.remi @remi-safe
php74-runtime.x86_64 1.0-1.el7.remi @remi-safe
以下是我的回购协议:
* base: mirror.fileplanet.com
* epel: mirror.prgmr.com
* extras: mirror.hostduplex.com
* remi-safe: mirrors.mediatemple.net
* updates: repos.lax.quadranet.com
编辑:更新的解决方案 下面是我最初的解决方案。然而,这里的根本问题是,当使用yum安装包时,由于某种原因,remi安装没有向$PATH添加任何内容 它将东西安装到
/opt/remi/php74/
中,然后由您更新环境变量
有一个环境源文件作为提示遗留下来,提示执行以下操作:
bash-4.2$ cat /opt/remi/php74/enable
export PATH=/opt/remi/php74/root/usr/bin:/opt/remi/php74/root/usr/sbin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/opt/remi/php74/root/usr/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export MANPATH=/opt/remi/php74/root/usr/share/man:${MANPATH}
在我的例子中,我使用的是docker,因此我在Dockerfile中添加了:
ENV PATH="/opt/remi/php74/root/usr/bin:/opt/remi/php74/root/usr/sbin${PATH:+:${PATH}}"
ENV LD_LIBRARY_PATH="/opt/remi/php74/root/usr/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
ENV MANPATH="/opt/remi/php74/root/usr/share/man:${MANPATH}"
在那之后,一切正常!所以环境变量就是所需要的。您可以使用rc.local、/etc/environment等来更新您的环境
------
原始解决方案:
最终解决了以下问题:
确保我们拥有最新的回购协议:
yum -y install \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
https://repo.ius.io/ius-release-el7.rpm \
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm \
http://mirrors.mediatemple.net/remi/enterprise/remi-release-7.rpm
然后,至少安装php74-php-pear
和php74-php-devel
(我需要安装更多的libs,但我相信这些都是必需的)
链接remi安装的pear。不知道为什么一开始没有发生这种情况:
ln -sf /opt/remi/php74/root/usr/bin/pear /usr/bin/pear
然后我可以做我需要做的事情:
pear channel-update pecl.php.net
pear upgrade -c pecl.php.net timezonedb
他成功地工作了
- 我认为问题在于我运行了错误的pear版本,而新安装的版本没有添加到路径中。创建指向路径目录的链接解决了此问题李>
- 您也可以编辑$PATH,但这对我的场景更有效李>
/opt/remi/php74/
中,然后由您更新环境变量
有一个环境源文件作为提示遗留下来,提示执行以下操作:
bash-4.2$ cat /opt/remi/php74/enable
export PATH=/opt/remi/php74/root/usr/bin:/opt/remi/php74/root/usr/sbin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/opt/remi/php74/root/usr/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export MANPATH=/opt/remi/php74/root/usr/share/man:${MANPATH}
在我的例子中,我使用的是docker,因此我在Dockerfile中添加了:
ENV PATH="/opt/remi/php74/root/usr/bin:/opt/remi/php74/root/usr/sbin${PATH:+:${PATH}}"
ENV LD_LIBRARY_PATH="/opt/remi/php74/root/usr/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
ENV MANPATH="/opt/remi/php74/root/usr/share/man:${MANPATH}"
在那之后,一切正常!所以环境变量就是所需要的。您可以使用rc.local、/etc/environment等来更新您的环境
------
原始解决方案:
最终解决了以下问题:
确保我们拥有最新的回购协议:
yum -y install \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
https://repo.ius.io/ius-release-el7.rpm \
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm \
http://mirrors.mediatemple.net/remi/enterprise/remi-release-7.rpm
然后,至少安装php74-php-pear
和php74-php-devel
(我需要安装更多的libs,但我相信这些都是必需的)
链接remi安装的pear。不知道为什么一开始没有发生这种情况:
ln -sf /opt/remi/php74/root/usr/bin/pear /usr/bin/pear
然后我可以做我需要做的事情:
pear channel-update pecl.php.net
pear upgrade -c pecl.php.net timezonedb
他成功地工作了
- 我认为问题在于我运行了错误的pear版本,而新安装的版本没有添加到路径中。创建指向路径目录的链接解决了此问题李>
- 您也可以编辑$PATH,但这对我的场景更有效李>
时区b
扩展没有用。
RPM软件包使用系统tzdata
,该系统单独更新
2/您与软件包名称混淆
软件包是为并行应用而设计的软件集合 安装多功能versonphp74 php-*
软件包更易于作为单一/默认版本使用php-*
module load php74
由于SCL设计用于多个版本,因此允许从一个版本切换到另一个版本
如果希望将集合设置为默认集合,则可以安装php74 syspath
软件包
但同样,使用
php-*
软件包更简单1/timezonedb
扩展也没有用。
RPM软件包使用系统tzdata
,该系统单独更新
2/您与软件包名称混淆
软件包是为并行应用而设计的软件集合 安装多功能versonphp74 php-*
软件包更易于作为单一/默认版本使用php-*
module load php74
由于SCL设计用于多个版本,因此允许切换fr