命令行安装的 PHP 如何加装启用 OCI8 模块组件

温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。

背景

当初为了省事,系统中 PHP 软件是通过命令行安装的:

# apt install php-fpm php-curl

在文章《在 Linux 系统中安装 Oracle 数据库客户端方法(Install Oracle Instant Client on Ubuntu)》中,提到了如何安装 Oracle 在 Linux 平台下的客户端,但是如果 PHP 要调用,还需要启用 oci8 组件。

网上搜了一圈,大多是介绍通过源码来编译安装,但是一开始我们就偷懒直接用命令行来安装 PHP 了,自然不希望再来使用源码安装,最好能够使用命令行直接安装。

比如要安装组件 xml,可以这么安装:

# apt install php-xml

但是安装 oci 是不行的,提示无此组件包:

# apt install oci8
...
E: Unable to locate package oci8

方法

经过研究相关资料,oci 可以通过 pear 命令来安装,然后 PHP 版本需要同时安装开发版(因为需要 phpize 命令)。

首先安装 PHP 开发版:

# apt install php7.4-dev

然后安装 pear 组件:

# apt install php-pear

接着安装 oci:

# pecl install oci8-2.2.0

安装过程中,会提示输入 instantclient 路径,依实际情况输入,比如我这边是:

...
...compiling with Oracle Instant Client [autodetect] : instantclient,/usr/lib/oracle/11.2/client64/lib

安装 Oracle instantclient

其实 apt 软件库也提供了 Oracle instantclient,所以也是可以一键安装的:

# apt install oracle-instantclient11.2-basic oracle-instantclient11.2-jdbc oracle-instantclient11.2-odbc oracle-instantclient11.2-sqlplus oracle-instantclient11.2-tools

输入后就会自动编译安装了,需要注意的是,上面这个流程只是安装 oci8.so 这个 PHP 库文件,我们要使用的话,还需要修改 php.ini 来加载这个库文件,如:

# echo 'extension=oci8.so' >> /etc/php/7.4/fpm/php.ini
# /etc/init.d/php7.4-fpm restart

然后在 phpinfo(); 中就可以看到 oci8 已经成功启用。

Q&A

1、通过 php -m 命令没看到 oci8 组件:

这是因为我们安装 PHP 时,其实安装了两个版本,一个是 cli 版本的 php7.4,另一个是 fpm 版本的 php-fpm7.4,在上面的操作中,我们只修改了 fpm7 的 php.ini,而 cli 的 php.ini 没有同步修改,且执行 php -m 调用的是 cli ,所以执行这个命令时不会显示 oci8 组件,我们只需要把 cli 的 php.ini 一起修改了就可以了。

# echo 'extension=oci8.so' >> /etc/php/7.4/cli/php.ini

cli 版本修改后立即生效。

2、安装 oci 时提示 Package "oci8" Version "3.3.0" does not have REST xml available:

这是因为针对不同版本的 PHP,oci8 也有是对应版本要求,比如针对目前 Debian 11 默认源中的 php7.4,对应的 oci8 版本是 2.2.0,若不指定版本则默认安装的是 3.3.0 版本,所以会报错,我们只要安装指定版本 oci 即可,具体版本限制,可参见官方说明。


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 php命令行安装模块oracle数据库oci 的文章

 本文最后更新于 2023/05/11 11:19:27,可能因经年累月而与现状有所差异。

 引用转载请注明: VirCloud's Blog > 经验 > 命令行安装的 PHP 如何加装启用 OCI8 模块组件