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 mb_convert_encoding 获取字符串编码类型实现代码
Apr 26 PHP
如何在php中正确的使用json
Aug 06 PHP
Windows7下的php环境配置教程
Feb 28 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
Mar 15 PHP
php+croppic.js实现剪切上传图片功能
Aug 14 PHP
laravel5实现微信第三方登录功能
Dec 06 PHP
PHP dirname简单使用代码实例
Nov 13 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
WINXP下apache+php4+mysql
2006/11/25 PHP
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
PHP用mysql数据库存储session的代码
2010/03/05 PHP
简单的php文件上传(实例)
2013/10/27 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
Python中使用动态变量名的方法
2014/05/06 Python
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
python去除字符串中的换行符
2017/10/11 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
对pandas replace函数的使用方法小结
2018/05/18 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
翻译专业应届生求职信
2013/11/23 职场文书
应用艺术专业个人的自我评价
2014/01/03 职场文书
揠苗助长教学反思
2014/02/04 职场文书
摄影助理岗位职责
2014/02/07 职场文书
房产委托公证书
2014/04/08 职场文书
我的理想演讲稿
2014/04/30 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
2015年行政部工作总结
2015/04/28 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
python 如何用terminal输入参数
2021/05/25 Python
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL
解析redis hash应用场景和常用命令
2021/08/04 Redis