Oci8扩展支持 SQL 和 PL/SQL 语句。 基本功能包括对事务控制、PHP 变量与 Oracle 占位符的绑定以及大对象(LOB)类型和集合的支持。 还支持 Oracle 的可伸缩性特性,例如数据库驻留连接池(DRCP)和结果缓存。
【Oracle下载地址】
https://www.oracle.com/database/technologies/instant-client/downloads.html
【获取链接】
在pecl上查看需要安装的扩展链接
1)下载
wget https://pecl.php.net/get/oci8-3.2.1.tgz
2)解压缩
tar -zxvf oci8-3.2.1.tgz
3)进入目录
cd oci8-3.2.1/
4)建立php的外挂模块
/usr/local/php/bin/phpize
5)生成Makefile
./configure --with-php-config=/usr/local/php/bin/php-config
6)编译安装
make && make install
【可能出现的错误】
一、未安装Oracle,详见上面的地址下载安装
configure: WARNING: OCI8 extension: ORACLE_HOME is not set, looking for default Oracle Instant Client instead checking Oracle Instant Client directory... configure: error: Oracle Instant Client directory /usr/lib/oracle/.../client64/lib libraries not found. Try --with-oci8=instantclient,DIR
二、PHP 是在启用 DTrace 动态跟踪的情况下编译的
oci8_dtrace_gen.h: No such file or directory
需要设置此环境变量后重新运行 configure 和 make 命令:
export PHP_DTRACE=yes
设置此环境变量后重新运行 configure 和 make 命令:
【再次生成Makefile】
./configure -with-oci8=shared,instantclient,/path/to/instant/client/lib
1)编译安装
make && make install
2)编译成功
【添加扩展】
vim /usr/local/php/etc/php.ini
在文件中移除extension=oci8前面的分号即可,然后重启PHP服务后就完了添加。
【Windows环境使用】
oci8扩展的安装不是你想的从PECL上下载了对应版本的dll文件,放到ext文件夹中,然后在PHP.ini文件中去掉了extension=oci8前面的分号,然后执行程序就可以了,还需要去掉extension=intl前面的分号,PHP intl 是国际化扩展,是ICU 库的一个包装器。
phpinfo里也看不到oci8的扩展信息,执行程序你会得到一个错误信息:
PHP Warning: PHP Startup: Unable to load dynamic library 'oci8_12c' (tried: ext\oci8_12c (找不到指定的模块。), ext\php_oci8_12c.dll (找不到指定的模块。)) in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library 'oci8_12c' (tried: ext\oci8_12c (找不到指定的模块。), ext\php_oci8_12c.dll (找不到指定的模块。)) in Unknown on line 0
这是机器上没有安装Oracle客户端,PHP的动态链接库无法调用Oracle的动态链接库链接数据库造成的。我们进入Oracle下载地址,选择对应的客户端版本,下载后将压缩包解压到任意分区中即可。
因为我不需要使用客户端,所有就下载了Basic Light Package版本。然后解压到了 D:\instantclient 将要文件夹里的oci.dll、oraons.dll、oraociicus19.dll复制到PHP的根目录中就可以了(不同PHP版本文件不同,你也可以吧所有的dll文件都复制过去),对不用配置环境变量,不用复制到Windows系统文件夹,只需要放到PHP程序的根目录就可以了,就这么简单。
然后重启PHP服务,在phpini里看一下oic8的扩展也正常加载出来。再试一下现程序,已经可以读取到数据库了。
登录后可发表评论