Csuper Blog

网络是工具,不是玩具...............Good Luck To You!

LNMP配置ORACLE InstentClient(CentOS) 

x.jpg  不一定要安装最新版本   最新版本中对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'。 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
控制面板
您好,欢迎到访网站!
  [查看权限]
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接
    • RainbowSoft Studio Z-Blog
    • 订阅本站的 RSS 2.0 新闻聚合

    Powered By Z-BlogPHP 1.7.3

    Copyright Csuper All Rights Reserved.