不言不语

您现在的位置是: 首页 >  PHP

PHP

CentOS下安装PHP Oracle数据库扩展

2022-06-05PHP
本机在CentOS系统下已有环境为PHP5.6,Apache2.4,因为PHP项目需要连接远程Oracle数据库,所以要打开PHP支持Oracle的扩展pdo_oci和oci8。安装pdo_oci扩展和oci8扩展之前必须先安装Oracle客户端。

一、安装Oracle客户端

1、到Oracle官网下载Oracle客户端rpm包oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm和oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm(下载文件需要注册),下载地址http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html。

2、使用RPM安装Oracle客户端

1
2

[root@WebAppServer apache]# rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
[root@WebAppServer apache]# rpm -ivh oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm

3、修改/etc/ld.so.conf,写入安装oracle客户端的lib路径:

1
2

[root@WebAppServer apache]# vi /etc/ld.so.conf
/usr/lib/oracle/11.2/client64/lib/

4、64位系统需要创建32位的软链接(这里可能是一个遗留bug,不然后面编译会出问题)

1
2

[root@WebAppServer apache]# ln -s /usr/lib/oracle/11.2/client64 /usr/lib/oracle/11.2/client
[root@WebAppServer apache]# ln -s /usr/include/oracle/11.2/client64 /usr/include/oracle/11.2/client

5、定义环境变量

1
2
3
4
5

[root@WebAppServer apache]# vi /etc/profile
#加入以下几行
export ORACLE_HOME=/usr/lib/oracle/11.2/client64/
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64:$LD_LIBRARY_PATH
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

6、执行soucere命令使环境配置立即生效

1

[root@WebAppServer apache]# source /etc/profile

二.安装PHP pdo_oci扩展
PHP扩展通常可以使用来安装PHP扩展,也可以直接下载PHP扩展源码。本文以PHP源码ext文件夹使用phpize安装oci和pdo_oic扩展。防止pdo_oci对oracle11支持不足(pdo_oci可能不支持oracle11g,需要做个软链接成作为oracle10版本才能编译过去):

1
2

[root@WebAppServer apache]# ln -s /usr/include/oracle/11.2 /usr/include/oracle/10.2.0.1
[root@WebAppServer apache]# ln -s /usr/lib/oracle/11.2 /usr/lib/oracle/10.2.0.1

1.使用phpize安装扩展(phpize和php-config一般在PHP安装目录bin下面,这个需要根据自己的实际安装情况而定),进入到php/ext/pdo_oci对应的扩展文件夹

1
2
3

[root@WebAppServer bin]# phpize
[root@WebAppServer bin]# ./configure --with-php-config=php-config --with-pdo-oci=instantclient,/usr,10.2.0.1
[root@WebAppServer bin]# make && make install

2.修改PHP配置,有两种方法,一是直接在php.ini中打开扩展,二是在php.d文件夹中添加对应的ini文件及内容

1
2

[root@WebAppServer bin]# vi /etc/php.ini
extension=pdo_oci.so //在php.ini中加入此行

或者直接在命令行输入

1

[root@WebAppServer bin]# echo 'extension=pdo_oci.so' > /etc/php.d/pdo_oci.ini

三.安装PHP oci8扩展
1.使用phpize安装扩展(phpize和php-config一般在PHP安装目录bin下面,这个需要根据自己的实际安装情况而定),进入到php/ext/oci8对应的扩展文件夹

1
2
3

[root@WebAppServer bin]# phpize
[root@WebAppServer bin]# ./configure --with-php-config=php-config --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client/lib
[root@WebAppServer bin]# make && make install

2.修改PHP配置,有两种方法,一是直接在php.ini中打开扩展,二是在php.d文件夹中添加对应的ini文件及内容

1
2

[root@WebAppServer bin]# vi /etc/php.ini
extension=oci8.so //在php.ini中加入此行

或者直接在命令行输入

1

[root@WebAppServer bin]# echo 'extension=oci8.so' > /etc/php.d/oci8.ini

最后重启,这样你使用phpinfo()函数就可以看到多了pdo_oci和oci8两个扩展。这样你的PHP就可以使用oci相关函数和pdo来操作Oracle数据库了。

PHP连接Oracle报错:
报错一:CDbConnection failed to open the DB connection: SQLSTATE[HY000]: OCIEnvNlsCreate: Check the character set is valid and that PHP has access to Oracle libraries and NLS data (/home/apacheapp/php-5.6.22/ext/pdo_oci/oci_driver.c:610)
报错二:Error: oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system – please check that ORACLE_HOME and LD_LIBRARY_PATH are set and point to the right directories
报错三:Warning: oci_connect() [function.oci-connect]: OCIEnvNlsCreate() failed. There is something wrong with your system – please check that LD_LIBRARY_PATH includes the directory with Oracle Instant Client libraries的解决办法:
在php-fpm.conf最后加上以下两行就可以解决以上三种报错:

1
2

env[LD_LIBRARY_PATH] = /usr/lib/oracle/11.2/client64/
env[ORACLE_HOME] = /usr/lib/oracle/11.2/client64/


文章评论