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+DBM的同学录程序(5)
Oct 09 PHP
smarty的保留变量问题
Oct 23 PHP
一步一步学习PHP(3) php 函数
Feb 15 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
JS与PHP向函数传递可变参数的区别实例代码
May 18 PHP
php简单定时执行任务的实现方法
Feb 23 PHP
php实现四舍五入的方法小结
Mar 03 PHP
PHP中trim()函数简单使用指南
Apr 16 PHP
PHP中两个float(浮点数)比较实例分析
Sep 27 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 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_MySQL教程-第一天
2007/03/18 PHP
生成php程序的php代码
2008/04/07 PHP
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
动态控制Table的js代码
2007/03/07 Javascript
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
浅析js中的浮点型运算问题
2014/01/06 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
Python创建或生成列表的操作方法
2019/06/19 Python
python用requests实现http请求代码实例
2019/10/31 Python
Python使用type动态创建类操作示例
2020/02/29 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
工程师岗位职责
2013/11/08 职场文书
行政经理的岗位职责
2013/11/23 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python