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 相关文章推荐
第九节--绑定
Nov 16 PHP
PHP 实现多服务器共享 SESSION 数据
Aug 15 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
Oct 29 PHP
深入掌握include_once与require_once的区别
Jun 17 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
Jun 24 PHP
smarty内置函数capture用法分析
Jan 22 PHP
php实现Mongodb自定义方式生成自增ID的方法
Mar 23 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
Jul 29 PHP
简单介绍PHP非阻塞模式
Mar 03 PHP
Yii2基于Ajax自动获取表单数据的方法
Aug 10 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 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判断字符以及字符串的包含方法属性
2008/08/30 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
Python栈算法的实现与简单应用示例
2017/11/01 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
python实现海螺图片的方法示例
2019/05/12 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
Python各种扩展名区别点整理
2020/02/27 Python
python文件排序的方法总结
2020/09/13 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
如何使用PHP session
2015/04/21 面试题
造价工程师个人求职信
2013/09/21 职场文书
党员批评与自我批评
2014/02/12 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
优秀班组申报材料
2014/12/25 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP