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编程中八种常见的文件操作方式
Nov 19 PHP
PHP读取MySQL数据代码
Jun 05 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 PHP
解析posix与perl标准的正则表达式区别
Jun 17 PHP
PHP使用CURL获取302跳转后的地址实例
May 04 PHP
PHP排序算法类实例
Jun 17 PHP
php把数组值转换成键的方法
Jul 13 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
微信公众平台DEMO(PHP)
May 04 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
PHP实现动态创建XML文档的方法
Mar 30 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
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
php中的动态调用实例分析
2015/01/07 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
window.open打开页面居中显示的示例代码
2013/12/27 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
Javascript Objects详解
2014/09/04 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
js判断文件格式及大小的简单实例(必看)
2016/10/11 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
python 追踪except信息方式
2020/04/25 Python
python连接mysql有哪些方法
2020/06/24 Python
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
文明生主要事迹
2014/05/25 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
2014年居委会工作总结
2014/12/09 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android