WDlinux官方论坛's Archiver

marquis 发表于 2014-3-26 21:51

linux+apache+php连接oracle数据库

好久没回到这里发帖了,还是那样熟悉的感觉。

相信大家在linux下用mysql的居多吧,其实在linux下php也能做到访问oracle,由于项目需要,我需要访问到远程的oracle数据库,
废话不多说直接说配置流程,这个方法远程连接和连接本地[size=12px]oracle数据库都有效[/size]
一.准备工作
需要增加相关的扩展,[font=lucida Grande, Tahoma, Arial, Helvetica, 宋体, sans-serif][size=3][color=#000000]安装oracle客户端、PDO_oci扩展、oci8扩展[/color][/size][/font]
二.文件下载
      (1)oracle客户端rpm包下载地址
       http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html  
      下载如下两个文件(下载文件需注册哦、wget命令就能下载):
       oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
      oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
(2)PDO_oci扩展、oci8扩展下载
   直接下载 http://pecl.php.net/package/PDO_OCI  (PDO_oci)
                    http://pecl.php.net/package/oci8  (oci8)

三.安装及配置oracle客户端
[code]#rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
#rpm -ivh oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm[/code]


安装好查看有没有安装成功
[code]rpm -qa | grep oracle                                                   查看oracle是否安装[/code]


2.配置
[p=26, 2, left]       修改/etc/ld.so.conf  或在ld.so.conf.d文件夹下添加oracle-x86_64.conf文件,写入安装oracle客户端的lib路径:[/p][p=26, 2, left][code]#vi /etc/ld.so.conf
/usr/lib/oracle/11.2/client64/lib/     //加入此行,保存退出[/code]
[/p]

  64位系统需要创建32位的软链接
[code]ln -s /usr/lib/oracle/11.2/client64 /usr/lib/oracle/11.2/client
ln -s /usr/include/oracle/11.2/client64 /usr/include/oracle/11.2/client[/code]



定义环境变量
[code]vi etc/profile[/code]

[code] 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="AMERICAN_AMERICA.AL32UTF8"[/code]



然后用以下语句使其立即生效
[code]#source /etc/profile[/code]



四.安装pdo_oci模块
[code]ln -s /usr/include/oracle/11.2 /usr/include/oracle/10.2.0.1
ln -s /usr/lib/oracle/11.2 /usr/lib/oracle/10.2.0.1[/code]

2.安装
[p=26, 2, left]       进入对应的扩展文件夹,例如/php/ext/php_oci[/p][p=26, 2, left]       然后开始安装[/p][p=26, 2, left][code]#phpize
# ./configure --with-php-config=php-config --with-pdo-oci=instantclient,/usr,10.2.0.1
#make && make install
#ll /usr/lib64/php/modules/[/code]
[/p]
[p=26, 2, left]可看到php_oci.so已在文件夹中[/p]
[p=26, 2, left]      3.配置[/p][p=26, 2, left]       有两种方法,其一,直接在php.ini中打开扩展,其二,在php.d文件夹中添加对应的ini文件及内容[/p][p=26, 2, left][code]#vi /etc/php.ini
加入此行
extension=pdo_oci.so[/code]
[/p]
[p=26, 2, left]五.安装oci8模块[/p][p=26, 2, left]  1.安装[/p][p=26, 2, left]      进入对应的扩展文件夹,开始安装[/p][p=26, 2, left][code]phpize
#./configure --with-php-config=php-config --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client/lib
#make && make install
#ll /usr/lib64/php/modules[/code]
[/p]
[p=26, 2, left] 可看到oci8.so已在文件夹中[/p][p=26, 2, left]      2.配置[/p][p=26, 2, left]      有两种方法,其一,直接在php.ini中打开扩展,其二,在php.d文件夹中添加对应的ini文件及内容[/p][p=26, 2, left][code]#vi /etc/php.ini
加入此行
extension=oci8.so[/code]
[/p]
[p=26, 2, left] 最后重启apache即可。phpinfo()可看到,php_oci及oci8扩展均已成功开启[/p][p=26, 2, left]
[/p][p=26, 2, left][size=4][color=#ff0000]可能发生的错误[/color][/size][/p][p=26, 2, left][size=3][color=#ff0000]1.在验证是否能连接数据库时,可能会提示缺少libaio.so[/color][/size][/p][p=26, 2, left][size=3][font=宋体]安装[/font]libaio.so[font=宋体]方法[/font][font=lucida Grande, Tahoma, Arial, Helvetica, 宋体, sans-serif] yum install libaio[/font][font=宋体]。[/font][/size][/p][p=30, 2, left][size=3][/size][/p][p=26, 2, left][size=3][color=#ff0000]2.[font=Verdana, Helvetica, Arial, sans-serif]lnmp[/font][font=宋体]连接[/font][font=Verdana, Helvetica, Arial, sans-serif]oracle[/font][font=宋体]出现[/font][font=Verdana, Helvetica, Arial, sans-serif]ORA-24408[/font][font=宋体]错误处理:[/font][/color][/size][/p][p=30, 2, left][size=3][font=宋体]错误代码:[/font]ORA-24408: could not generate unique server group name[/size][/p][p=30, 2, left][size=3] [/size][/p][p=30, 2, left][size=3][font=宋体]一般连接外部[/font]oracle[font=宋体]服务器那一步骤时,可能会出现[/font]ORA-24408:could not generate unique server group name[font=宋体]这样的错误,解决办法是在[/font]hosts[font=宋体]中将主机名添加即可:[/font][/size][/p][p=30, 2, left][size=3] [/size][/p][p=30, 2, left][size=3] vi /etc/hosts[/size][/p][p=30, 2, left][size=3]127.0.0.1 localhostlocalhost.localdomain localhost4 localhost4.localdomain4 test[/size][/p][p=30, 2, left][size=3]::1 localhost localhost.localdomainlocalhost6 localhost6.localdomain6 test[/size][/p][p=30, 2, left][size=3][font=宋体]上面的代码中,[/font]test[font=宋体]即为主机名。然后重启网络服务即可。[/font]service network restart[/size][/p][p=30, 2, left][size=3][color=#ff0000]3.连接数据库成功,但查询时出现数据乱码[/color][/size][/p][p=30, 2, left][size=3][font=宋体]当远程连接[/font]oracel[font=宋体]是[/font]oci_connect[font=宋体]的第四个参数为[/font]charset[/size][/p][p=30, 2, left][size=3][/size][/p][p=30, 2, left][size=3]OCI_connect('','','','zhs16gbk');[/size][/p][p=30, 2, left][size=3]此方法觉得有效,不管你怎么改php、linux系统编码都解决不了。亲测。[/size][/p]
[p=30, 2, left][size=4][b]以上都是自己在配置时的流程,亲测有效,遇到的这三个问题也是可以解决的。[/b][/size][/p]
[p=30, 2, left]
[/p][p=30, 2, left][/p]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.