You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu服务器为多版本PHP构建oci8扩展时旧版本扩展丢失求助

解决多版本PHP安装oci8扩展时旧版本扩展被删除的问题

问题背景

搭载Ubuntu 22.04的服务器,通过ondrej:ppa安装了PHP 7.4和8.0多个版本,执行以下脚本为单个版本安装oci8扩展时正常,但为第二个版本安装后,之前版本的oci8扩展被删除:

phpver='7.4'
builddir="/build$phpver"
instpath='/opt/oracle/instantclient_21_12'

[ "$phpver" = '7.4' ] && oci8version='oci8-2.2.0'
[ "$phpver" = '8.0' ] && oci8version='oci8-3.0.1'

update-alternatives --set php "/usr/bin/php${phpver}" && \
update-alternatives --set phpize "/usr/bin/phpize${phpver}" && \
update-alternatives --set php-config "/usr/bin/php-config${phpver}" && \
rm -f "/etc/php/${phpver}/mods-available/oci8.ini" && \
touch "/etc/php/${phpver}/mods-available/oci8.ini" && \
pear config-set php_ini "/etc/php/${phpver}/mods-available/oci8.ini" && \
mkdir -pv "$builddir" && \
pear config-set temp_dir "$builddir" && \
pecl install -f --configureoptions "with-oci8=\"instantclient,$instpath\"" "$oci8version" && \
phpenmod -v "${phpver}" oci8
pear config-set php_ini ''
pear config-set temp_dir ''
rm -rf "$builddir"

问题原因

脚本依赖update-alternatives切换全局PHP环境,虽然切换了php、phpize、php-config,但全局的pecl命令本质上仍与特定PHP版本绑定,且修改全局pear配置时可能干扰其他版本的扩展文件或配置,导致安装新版本时覆盖旧版本的oci8扩展。

解决方法

放弃全局环境切换,直接使用对应PHP版本的专属工具命令(如pecl7.4、phpize7.4),实现各版本扩展安装的完全隔离。修改后的脚本如下:

phpver='7.4' # 切换为8.0即可为对应版本安装
builddir="/build$phpver"
instpath='/opt/oracle/instantclient_21_12'

[ "$phpver" = '7.4' ] && oci8version='oci8-2.2.0'
[ "$phpver" = '8.0' ] && oci8version='oci8-3.0.1'

# 指定对应版本的专属工具路径
PHPIZE="/usr/bin/phpize${phpver}"
PHPCONFIG="/usr/bin/php-config${phpver}"
PECL="/usr/bin/pecl${phpver}"

rm -f "/etc/php/${phpver}/mods-available/oci8.ini" && \
touch "/etc/php/${phpver}/mods-available/oci8.ini" && \
${PECL} config-set php_ini "/etc/php/${phpver}/mods-available/oci8.ini" && \
mkdir -pv "$builddir" && \
${PECL} config-set temp_dir "$builddir" && \
${PECL} install -f --configureoptions "with-oci8=\"instantclient,$instpath\"" "$oci8version" && \
phpenmod -v "${phpver}" oci8
${PECL} config-set php_ini ''
${PECL} config-set temp_dir ''
rm -rf "$builddir"

额外验证步骤

若旧版本扩展已被删除,运行上述修改后的脚本重新安装即可。可通过以下命令检查各版本oci8扩展是否存在:

  • PHP 7.4:ls /usr/lib/php/20190902/oci8.so
  • PHP 8.0:ls /usr/lib/php/20200930/oci8.so

内容的提问来源于stack exchange,提问作者Darko Miletic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:05:57