PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法


Posted in PHP onMay 13, 2016

本文实例讲述了PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法。分享给大家供大家参考,具体如下:

php连接oracle数据库虽然不是最佳拍档,但组内开发确实有这样需求。如果没有参考合适的文档,这个过程还是挺折磨人的,下面是一个记录,原型是国外的一篇博客 Installing PDO_OCI and OCI8 PHP extensions on CentOS 6.4 64bit 。

假设你已经安装好php的环境,php版本为5.3,要连接的oracle服务器是 11g R2,操作系统版本CentOS 6.4 x86_64。如果没有安装php,可以通过以下命令安装:

# yum install php php-pdo
# yum install php-devel php-pear php-fpm php-gd php-ldap \
php-mbstring php-xml php-xmlrpc php- zlib zlib-devel bc libaio glibc

假如web服务器使用apache。

1. 安装InstantClient

instantclient是oracle的连接数据库的简单客户端,不用安装一个500Moracle客户端就可以连接oracle数据库,有windows和linux版本。从 这里 选择需要的版本下载,只需Basic和Devel两个rpm包。

安装

# rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
# rpm -ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

软链接

# ln -s /usr/include/oracle/11.2/client64 /usr/include/oracle/11.2/client
# ln -s /usr/lib/oracle/11.2/client64 /usr/lib/oracle/11.2/client

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

接下来还要让系统能够找到oracle客户端的库文件,修改LD_LIBRARY_PATH:

# vi /etc/profile.d/oracle.sh
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

执行source /etc/profile.d/oracle.sh使环境变量生效。

2. 安装PDO_OCI

在连接互联网的情况下,通过pecl在线安装php的扩展非常简单,参考 How to install oracle instantclient and pdo_oci on ubuntu machine 。

从https://pecl.php.net/package/PDO_OCI下载 PDO_OCI-1.0.tgz 源文件。

# wget https://pecl.php.net/get/PDO_OCI-1.0.tgz
# tar -xvf PDO_OCI-1.0.tgz
# cd PDO_OCI-1.0

由于PDO_OCI很久没有更新,所以下面需要编辑ODI_OCI-1.0文件夹里的config.m4文件来让它支持11g:

# 在第10行左右找到与下面类似的代码,添加这两行:
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then
 PDO_OCI_VERSION=11.2
# 在第101行左右添加这几行:
11.2)
 PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
 ;;

编译安装pdo_oci扩展:(安装完成后可在 /usr/lib64/php/modules/pdo_oci.so 找到这个模块)

$ phpize
$ ./configure --with-pdo-oci=instantclient,/usr,11.2
$ make
$ sudo make install

要启用这个扩展,在/etc/php.d/下新建一个pdo_oci.ini文件,内容:

extension=pdo_oci.so

验证安装成功:

# php -i|grep oci

看到类似下面的内容则安装成功:

/etc/php.d/pdo_oci.ini,

PDO drivers => oci, sqlite

# php -m

3. 安装OCI8

从 https://pecl.php.net/package/oci8 下载oci8-2.0.8.tgz源文件。

# wget https://pecl.php.net/get/oci8-2.0.8.tgz
# tar -xvf oci8-2.0.8.tgz
# cd oci8-2.0.8

编译安装oci8扩展:

# phpize
# ./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib
# make
# make install

要启用这个扩展,在/etc/php.d/下新建一个oci8.ini文件,内容:

extension=oci8.so

验证安装成功:

# php -i|grep oci8
/etc/php.d/oci8.ini,
oci8
oci8.connection_class => no value => no value
oci8.default_prefetch => 100 => 100
oci8.events => Off => Off
oci8.max_persistent => -1 => -1
oci8.old_oci_close_semantics => Off => Off
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20
OLDPWD => /usr/local/src/oci8-2.0.8
_SERVER["OLDPWD"] => /usr/local/src/oci8-2.0.8

最后别忘了重启逆web服务器如apache,可以通过phpinfo()来确保扩展是否成功安装。

4. 测试连接

在你web服务器如apache的php目录下创建testoci.php:

<?php
$conn = oci_connect('username', 'password', '172.29.88.178/DBTEST');
$stid = oci_parse($conn, 'select table_name from user_tables');
oci_execute($stid);
echo "<table>\n";
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
  echo "<tr>\n";
  foreach ($row as $item) {
    echo " <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : " ")."</td>\n";
  }
  echo "</tr>\n";
}
echo "</table>\n";
?>

访问这个页面就应该可以得到结果了。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
Php+SqlServer实现分页显示
Oct 09 PHP
php预定义常量
Dec 25 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
Oct 21 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
php将图片文件转换成二进制输出的方法
Jun 10 PHP
php mysql like 实现多关键词搜索的方法
Oct 29 PHP
php根据用户名和手机号查询是否存在手机号码
Feb 16 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
laravel5.2表单验证,并显示错误信息的实例
Sep 29 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
May 13 #PHP
CodeIgniter 完美解决URL含有中文字符串
May 13 #PHP
php htmlentities()函数的定义和用法
May 13 #PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 #PHP
php调用自己java程序的方法详解
May 13 #PHP
Linux php 中文乱码的快速解决方法
May 13 #PHP
PHP 返回13位时间戳的实现代码
May 13 #PHP
You might like
PHILIPS AE3805收音机的分析打磨
2021/03/02 无线电
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
php+highchats生成动态统计图
2014/05/21 PHP
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
Python自动抢红包教程详解
2019/06/11 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
对python中的装包与解包实例详解
2019/08/24 Python
Python新手学习raise用法
2020/06/03 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
python各种excel写入方式的速度对比
2020/11/10 Python
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
统计每一学生的平均成绩
2014/06/06 面试题
民生工程实施方案
2014/03/22 职场文书
情况说明书格式范文
2014/05/06 职场文书
党性心得体会
2014/09/03 职场文书
安全保证书格式
2015/02/28 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang
Redis实战高并发之扣减库存项目
2022/04/14 Redis
Django框架模板用法详解
2022/06/10 Python