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 miniBB中文乱码问题解决方法
Nov 25 PHP
php下使用iconv需要注意的问题
Nov 20 PHP
PHP与Java进行通信的实现方法
Oct 21 PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 PHP
PhpDocumentor 2安装以及生成API文档的方法
May 21 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 PHP
php抽象类使用要点与注意事项分析
Feb 09 PHP
php实现表单多按钮提交action的处理方法
Oct 24 PHP
Smarty环境配置与使用入门教程
May 11 PHP
PHP抽象类与接口的区别实例详解
May 09 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 PHP
PHP控制循环操作的时间
Apr 01 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
php a simple smtp class
2007/11/26 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
Extjs中常用表单介绍与应用
2010/06/07 Javascript
Javascript变量函数浅析
2011/09/02 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
JS+canvas绘制的动态机械表动画效果
2017/09/12 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
Python编程中对文件和存储器的读写示例
2016/01/25 Python
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
python实现图片识别汽车功能
2018/11/30 Python
Python模块的加载讲解
2019/01/15 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
机械专业应届生求职信
2013/09/21 职场文书
土木工程毕业生推荐信
2013/10/28 职场文书
区域销售经理职责
2013/12/22 职场文书
便利店促销方案
2014/02/20 职场文书
求职信模板标准格式范文
2014/02/23 职场文书
关于旅游的活动方案
2014/08/15 职场文书
升职自我推荐信范文
2015/03/25 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS