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