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 一个页面执行时间类代码
Mar 05 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
Oct 31 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
Feb 12 PHP
php获取远程文件的内容和大小
Nov 03 PHP
php验证码生成代码
Nov 11 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
Jun 29 PHP
Zend Framework入门教程之Zend_Config组件用法详解
Dec 09 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 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
APMServ使用说明
2006/10/23 PHP
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
Javascript window对象详解
2014/11/12 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
python操作MongoDB基础知识
2013/11/01 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
自荐信格式范文
2013/10/07 职场文书
40岁生日感言
2014/02/15 职场文书
端午节演讲稿
2014/05/23 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
Python中的变量与常量
2021/11/11 Python