温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。
背景
当初为了省事,系统中 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.inicli 版本修改后立即生效。
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 即可,具体版本限制,可参见官方说明。