LNMP配置ORACLE InstentClient(CentOS)
不一定要安装最新版本 最新版本中对glibc版本有要求 亲测可用 多处踩坑
LNMP配置ORACLE InstentClient(CentOS) 不一定要安装最新版本 最新版本中对glibc版本有要求
下载
Oracle InstantClient
从Oracle官网下载以下文件:
oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm(可选)
PHP扩展
1、PDO_OCI
PDO_OCI-1.0.tgz(PHP 5.0.3+,pdo 1.0+)2、OCI8
OCI8 2.0.12(PHP 5.2 - 5.6)务必选择正确的版本,否则后续编译会报错!
===================
安装Oracle InstantClient
rpm -ivh oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.x86_64.rpm
rpm -ivh oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
=======================
查看安装是否成功:rpm -qa | grep oracle
配置
修改/etc/ld.so.conf或在ld.so.conf.d文件夹下添加oracle.conf文件,写入安装oracle客户端的lib路径:
#vi /etc/ld.so.conf
/usr/lib/oracle/12.2/client64/lib/ // 加入此行,保存退出
64位系统需要创建32位的软链接(这里可能是一个遗留bug,不然后面编译会出问题):
ln -s /usr/lib/oracle/12.2/client64 /usr/lib/oracle/12.2/client
ln -s /usr/include/oracle/12.2/client64 /usr/include/oracle/12.2/client
=================
定义环境变量
vi /etc/profile
加入以下几行:
export ORACLE_HOME=/usr/lib/oracle/12.2/client64/
export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64:$LD_LIBRARY_PATH
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
其中数据库编码应根据实际数据库编码指定!
命令行输入以下语句使环境配置立即生效:
source /etc/profile
=====================
安装SQLPLUS
rpm -ivh oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm
使用的时候可能出现错误:
error while loading shared libraries: libsqlplus.so: cannot open shared object file.
使用以下命令:
export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64:/usr/lib/oracle/12.2/client64/lib
export LD_LIBRARY_PATH=$ORACLE_HOME:$ORACLE_HOME/lib
连接命令
sqlplus username/password@host:port/sid
ORA-21561: OID generation failed:sqlplus remote connection giving ORA-21561
================
安装OCI8
tar -xvf oci8-2.0.12.tgz
cd oci8-2.0.12
/usr/bin/phpize
此处需要注意 php的实际安装路径 找安装路径下找到 phpize
开始编译:./configure --with-php-config=/usr/local/php/bin/php-config --with-oci8=shared,instantclient,/usr/lib/oracle/12.2/client64/libmakemake install
找到php.ini文件(find / -name 'php.ini')
将extension_dir指向相关扩展目录(如果使用LNMP集成安装包,此配置不需要修改),然后加上相应扩展:
[oci8] #路径为实际安装php版本的库扩展支持路径
extension_dir =/www/wdlinux/apache_php-5.5.38/lib/php/extensions/no-debug-non-zts-20121212
extension=oci8.so
重启PHP就可看到OCI8扩展了。
================
安装PDO_OCI
tar -xvf PDO_OCI-1.0.tgz
cd PDO_OCI-1.0
======================
为防止PDO_OCI对ORACLE 11支持不足(PDO_OCI可能不支持ORACLE 11g),需要做个软链接作为ORACLE 10才能编译过去:
ln -s /usr/include/oracle/12.2 /usr/include/oracle/10.2.0.1
ln -s /usr/lib/oracle/12.2 /usr/lib/oracle/10.2.0.1
===========================
开始编译:
/usr/bin/phpize #路径为实际安装php版本的库扩展支持路径
./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-oci=instantclient,/usr,10.2.0.1
make
make install
=======================
编译的时候的问题
pdo_oci.c:34: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘pdo_oci_functions’
需要在pdo_oci.c文件中
将 function_entry 改成 zend_function_entry
==================
同上,添加相应扩展:
[PDO_oci8] #路径为实际安装php版本的库扩展支持路径
extension_dir =/www/wdlinux/apache_php-5.5.38/lib/php/extensions/no-debug-non-zts-20121212
extension=pdo_oci.so
重启PHP就可看到PDO_OCI扩展了。
=======================
PHP-FPM
做完以上所有步骤后应该就可以正常访问Oracle数据库了,但访问ORACLE查询时的数据库编码仍然可能出现问题,需要在配置文件php-fpm.conf加入以下配置并重启PHP-FPM才能避免出现数据库编码问题:
env[ORACLE_HOME] =/usr/lib/oracle/12.2/client64
env[LD_LIBRARY_PATH] = /usr/lib/oracle/12.2/client64/lib
env[NLS_LANG] ="AMERICAN_AMERICA.AL32UTF8"
注意 要加在具体的Pool Definitions中,如[www]中,具体请见php-fpm.conf
PHP框架
相关PHP框架,如ThinkPHP需要修改连接时的数据库编码,如DB_CHARSET='AL32UTF8'。
版权声明
本文仅代表作者观点,不代表Csuper立场。
本文系作者授权百度百家发表,未经许可,不得转载。