编译安装PDO_OCI

新源码:php-5.6.30\ext\pdo_oci (建议)

需要单独编译,不能和PHP一起编译

编译安装

instantclient-sdk-linux.x64-12.2.0.1.0 的INCLUDE中的文件COPY到include目录下(或者做个软连接也行)

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-oci=shared,instantclient ,12.2

旧PDO_OCI代码支持新版方式(参考度娘)

不推荐这个方式。

防止pdo_oci对oracle11支持不足(pdo_oci可能不支持oracle11g,需要做个软链接成作为oracle10版本才能编译过去):

[root@ZF PDO_OCI-1.0]# ln -s /usr/include/oracle/12.2 /usr/include/oracle/10.2.0.3

[root@ZF PDO_OCI-1.0]# ln -s /usr/lib/oracle/12.2 /usr/lib/oracle/10.2.0.3

[root@ZF PDO_OCI-1.0]# /usr/local/php/bin/phpize   用phpize来扩展

Configuring for:

PHP Api Version:         20090626

Zend Module Api No:      20090626

Zend Extension Api No:   220090626

[root@ZF PDO_OCI-1.0]# ./configure --with-php-config=php-config --with-pdo-oci=instantclient,/usr,10.2.0.3

注:--with-pdo-oci这里也可以写全路径,可通过./configure --help查看具体用法

[root@ZF PDO_OCI-1.0]# make

......

Libraries have been installed in:

/usr/local/src/PDO_OCI-1.0/modules

......

[root@ZF PDO_OCI-1.0]# make install

Installing shared extensions:     /usr/lib64/php/modules/

[root@ZF PDO_OCI-1.0]# ll /usr/lib64/php/modules/ |grep pdo_oci.so

-rwxr-xr-x 1 root root  115420 Nov  6 17:32 pdo_oci.so   模块已经加载到php中

[root@ZF PDO_OCI-1.0]#vi /etc/php.ini配置文件中加入

extension=pdo_oci.so       或者在/etc/php.d/下新建个pdo_oci.ini,添加进去

PHP源码中的pdo-oci代码支持11/12版本

修改config.m4支持oracle 11/12版本

SUPPORTED_LIB_VERS="9.0 10.1 11.1 12.1 "  # The lib vers are not bumped when the DB version is bumped

改成

SUPPORTED_LIB_VERS="9.0 10.1 11.1 12.1 12.2"  # The lib vers are not bumped when the DB version is bumped

PDO_OCI_IC_PREFIX="`echo $PDO_OCI_DIR | cut -d, -f2`"

PDO_OCI_IC_VERS="`echo $PDO_OCI_DIR | cut -d, -f3`"

改成:

PDO_OCI_IC_PREFIX="`echo $PDO_OCI_DIR | cut -d, -f1`"

PDO_OCI_IC_VERS="`echo $PDO_OCI_DIR | cut -d, -f2`"

if test "$PHP_PDO_OCI" = "yes" || test -z "$PHP_PDO_OCI"; then

PDO_OCI_DIR=$ORACLE_HOME

else

PDO_OCI_DIR=$PHP_PDO_OCI

Fi

改成

if test "$PHP_PDO_OCI" = "yes" || test -z "$PHP_PDO_OCI"; then

PDO_OCI_DIR=$PHP_PDO_OCI

else

PDO_OCI_DIR=$ORACLE_HOME

Fi

case $PDO_OCI_VERSION in

9.0|10.1|10.2|11.1|11.2|12.1)

改成

case $PDO_OCI_VERSION in

9.0|10.1|10.2|11.1|11.2|12.1|12.2)

旧代码中支持11/12版本(参考度娘)

修改config.m4支持11/12版本

这里我并没有安装这个扩展,我只安装了oci8,直接看第三步(by:sunfei)

# 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和12c:

查看instant client packages的安装位置(/usr/lib/oracle/12.2/client64/lib)libclntsh.so.XX.XX 后面带的版本号对应是12.1不是12.2,注意一下。

$SHLIB_SUFFIX_NAME就是so

#在第10行左右找到与下面类似的代码,添加这两行:

eliftest-f$PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2;then

PDO_OCI_VERSION=11.2

eliftest-f$PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.12.1then

PDO_OCI_VERSION=12.2

#在第101行左右添加这几行:

11.2)

PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)

;;

12.2)

PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)

;;

40行左右:

if test "$PHP_PDO_OCI" = "yes" -o -z "$PHP_PDO_OCI"; then

PDO_OCI_DIR=$ORACLE_HOME

else

PDO_OCI_DIR=$PHP_PDO_OCI

Fi

改成

if test "$PHP_PDO_OCI" = "yes" -o -z "$PHP_PDO_OCI"; then

PDO_OCI_DIR=$PHP_PDO_OCI

else

PDO_OCI_DIR=$ORACLE_HOME

fi

编译安装pdo_oci扩展:(安装完成后可在 /usr/lib64/php/modules/pdo_oci.so 找到这个模块)

$ /usr/local/php/bin/phpize

$./configure--with-php-config=/usr/local/php/bin/php-config--with-pdo-oci=instantclient,/usr,12.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

这个编译选项会产生:checking for oci.h... configure: error: I'm too dumb to figure out where the include dir is in your instant client install

./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-oci=shared,instantclient, 12.2

configure: error: Unsupported Oracle version! 12.2 编译配置文件中 config.m4 会判断 libclntsh的版本

注意libclntsh的版本是12.1不是12.2

checking for oci.h... configure: error: I'm too dumb to figure out where the include dir is in your instant client install

config.m4 会判断 AC_MSG_CHECKING([for oci.h])的版本?

[root@localhost PDO_OCI-1.0]# make

/opt/softwares/php-oracle/PDO_OCI-1.0/pdo_oci.c:34: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘pdo_oci_functions’

function_entry pdo_oci_functions[] = {

{NULL, NULL, NULL}

};

改为:

const zend_function_entry pdo_oci_functions[] = {

{NULL, NULL, NULL}

};

/opt/softwares/php-oracle/PDO_OCI-1.0/pdo_oci.c:56: 错误:‘pdo_oci_functions’未声明(不在函数内)

PDO_OCI-1.0/pdo_oci.c查看:

第34生和56行,更改第34行 为const zend_function_entry pdo_oci_functions[] =

[root@localhost PDO_OCI-1.0]# make install

配置

php.ini 里添加

extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/pdo_oci.so

使用篇

(参考度娘)

使用过程跟pdo差不多,我对oracle还不是很了解,但是也遇到一个故障,那就是无法连接oracle。

一开始通过下面的方式连接:

$pdh =newPDO('oci:dbname=IP地址:端口号/SID',用户名,密码);

报错:

SQLSTATE[HY000]:pdo_oci_handle_factory:ORA-12514:TNS:listener does not currently know of service requestedinconnect descriptor

改成下面这种连接方式:

这样就没问题了。

$tns = "

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = yourip)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

";

$db_username = "youname";

$db_password = "yourpassword";

try{

$conn = new PDO("oci:dbname=".$tns,$db_username,$db_password);

}catch(PDOException $e){

echo ($e->getMessage());

}

?>

php oci8 12c.so,编译安装PDO_OCI支持ORACLE 12c相关推荐

  1. php 编译 线程安全,PHP7(zts 线程安全版)编译安装(支持多线程pthreads)

    1.安装PHP7: wget http://ar2.php.net/get/php-7.0.3.tar.gz/from/this/mirror -O php.tar.gz tar -zxvf php. ...

  2. centos编译安装配置支持ssl加密的mysql replication

    参考文章:http://www.howtoforge.com/how-to-set-up-mysql-database-replication-with-ssl-encryption-on-cento ...

  3. mysql ssl编译_centos编译安装配置支持ssl加密的mysql replication

    参考文章:http://www.howtoforge.com/how-to-set-up-mysql-database-replication-with-ssl-encryption-on-cento ...

  4. linux数据库12c安装图解,Linux + Oracle 12c RAC安装配置详细记录过程_图文并茂.pdf

    Linux +Oracle12cRAC安装配置详细记录过程_图文并茂_v1.0 Version:<1.0> Linux +Oracle12cRAC安装配置详细记录过程_图文并茂_v1.0 ...

  5. oracle 12c容器数据库备份和恢复,oracle 12c数据库备份与恢复

    oracle用得不是很多,但总体用起来也没啥问题,因为大多数时候就是增删查改的操作,这些跟其他数据库也没多大区别.不过当遇到备份和恢复的时候,才发现区别是比较大的,因此留下这篇文章做一个记录,方便以后 ...

  6. oracle12 java_java – 无法使用12c jar创建Eclipse数据源到Oracle 12c.不过11g的作品

    当我打开数据源资源管理器窗口并尝试创建一个新的连接配置文件时,我选择"Oracle",Oracle瘦驱动程序,然后我指向我的PC上的以下JAR文件: C:\oracle_12101 ...

  7. Ubuntu 18.04从源代码编译安装GPU支持的Tensorflow 1.8.0

    当我第一次使用Linux时,我想要做的第一件事就是安装GPU版本Tensorflow.我找到了一个很好的指南.但即使考虑到这一点,我也花了超过40个小时的安装.这篇文章我想节省你的时间,分享自己的经验 ...

  8. Oracle 12c 安装(内附软件包)

    Oracle 12c 简介 Oracle数据库最新版本为Oracle Database 12c.Oracle数据库12c 引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云.此外,一些创新 ...

  9. ArcSDE 10.2 for Oracle 12C安装注意事项

    ArcSDE 10.2 for Oracle 12C安装注意事项 1.环境说明 从ArcSDE10.2.1开始支持Oracle 12C. 2.安装注意事项 SDE空间数据库可以安装到PDB中,使用Cr ...

最新文章

  1. 世界上最遥远的距离是计算机不懂人类的时间
  2. Struts2中action获取request、response、session的方式
  3. feature map 意义_FeatureMap Viewer以及中心化对统计分布变化的影响讨论
  4. HTTP Status 500 - Servlet.init() for servlet springmvc threw exception
  5. springboot实现简单的文件上传与回显
  6. 基于zookeeper实现的分布式锁
  7. 分类算法——决策树算法及其R实现
  8. 使用IAR开发CC2530遇到的两个问题
  9. 简单几何(极角排序) POJ 2007 Scrambled Polygon
  10. sp 导出unity哪个_GitHub上发现的一个导出Unity3D场景数据的工具
  11. ZZULIJ 1129: 第几天
  12. 室内声场计算机模拟的声线跟踪法和虚声源法,基于声线跟踪法的室外声场仿真.doc...
  13. Swing 线程之SwingUtilities.invokeLater()
  14. 运维项目经验示例(参考)
  15. 如何使用NFC双界面读写器UTrust4701读取电子护照信息
  16. DirectX修复工具
  17. python 麦克风人声检测_人声后期混音教程:13条人声处理技巧
  18. 关于编程等宽字体 Cascadia Code
  19. cad打印本计算机未配置,为什么CAD点打印的时候会警告无法使用此绘图仪配置?...
  20. Kafka 过期数据清理 详解

热门文章

  1. 论文降重有效减少重复率修改的方法
  2. spss 构建决策树 树形图 正在处理不显示问题
  3. eclips启动code=13的处理经验
  4. 锁定文件失败 打不开磁盘“D:\Documents\Virtual Machines\Red Hat Enterprise Linux 6 64 位\Red Hat Enterprise Linux
  5. 智慧社区GIS系统开发详细设计
  6. Mysql错误:Incorrect string value: ‘\xF3\xBD\xAA\xA2/\xEF...‘ for column
  7. 超前 、滞后、超前滞后介绍
  8. 美国杜克大学计算机学院,杜克大学计算机专业留学的生活经历故事
  9. 使用zinnia制作android手写输入功能(上)-------------------编译zinnia
  10. Java中哪些集合是有序的?