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

小助手读文章 00:00 / 00:00

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

背景

当初为了省事,系统中 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,在上面的操作中,我们只修改了 fpm7php.ini,而 cliphp.ini 没有同步修改,且执行 php -m 调用的是 cli ,所以执行这个命令时不会显示 oci8 组件,我们只需要把 cliphp.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

这是因为针对不同版本的 PHPoci8 也有是对应版本要求,比如针对目前 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 模块组件