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实现登陆验证码(类似条行码状)
Oct 09 PHP
PHP Array交叉表实现代码
Aug 05 PHP
PHP-redis中文文档介绍
Feb 07 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
php简单smarty入门程序实例
Jun 11 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
PHP中array_keys和array_unique函数源码的分析
Feb 26 PHP
thinkPHP框架自动填充原理与用法分析
Apr 03 PHP
PHP集成环境XAMPP的安装与配置
Nov 13 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
Mar 22 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
win10下 php安装seaslog扩展的详细步骤
Dec 04 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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
深入php内核之php in array
2015/11/10 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
如何离线执行php任务
2017/02/21 PHP
PHP调用其他文件中的类
2018/04/02 PHP
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
jQuery实现图片信息的浮动显示实例代码
2013/08/28 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
node.js发送邮件email的方法详解
2017/01/06 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
浅谈js闭包理解
2019/04/01 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
python and or用法详解
2019/06/26 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
知识竞赛活动方案
2014/02/18 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
2014年销售部工作总结
2014/12/01 职场文书
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS
Django框架中视图的用法
2022/06/10 Python
python数字图像处理:图像的绘制
2022/06/28 Python