PHP5.6.3配置oracle连接支持

随笔,仅供本人参考

PHP5.6.3安装PDO_OCI1.0和OCI8-1.4.10模块,提供Oracle支持。


Oracle Instant Client

前往官网下载安装client RPM包,Instant Client for Linux x86-64 (64-bit)
我的是PHP5.6.3下载的是以下几个版本:(因为下载需要登录状态,推荐在电脑上下完然后传到服务器上安装)

oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
#rpm -ivh *.rpm
//使用RPM安装以上软件包

配置:创建软连接

#ln -s /usr/lib/oracle/11.2/client64 /usr/lib/oracle/11.2/client
#ln -s /usr/include/oracle/11.2/client64 /usr/include/oracle/11.2/client

#ln -s /usr/include/oracle/11.2 /usr/include/oracle/10.2.0.1
#ln -s /usr/lib/oracle/11.2 /usr/lib/oracle/10.2.0.1
//因为PDO_OCI和OCI8模块对11支持不足,所以需要做个软连接才能编译成功。

配置:动态库及环境变量

#vi /etc/ld.so.conf
/usr/lib/oracle/11.2/client64/lib
//在文档最后追加以上,:x保存退出。
#ldconfig

#vi /etc/profile
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:$LD_LIBRARY_PATH
export NLS_LANG=“AMERICAN_AMERICA.AL32UTF8”
//在文档最后追加以上,:x保存退出。
#source /etc/profile

注意:如果是已经是连接了多个终端的情况下,ldocnfig和source只会在当前终端即时生效,重新登录或者在其他终端上面输入一遍这些命令即可。


PDO_OCI模块

前往官网下载PDO_OCI源码包,PECL ::包:: PDO_OCI

#wget https://pecl.php.net/get/PDO_OCI-1.0.tgz
#tar -zxvf PDO_OCI-1.0.tgz
#cd PDO_OCI-1.0
#/opt/php-5.6.3/bin/phpize
//注意这里是进入PDO_OCI解压后的路径,然后再执行phpize。phpize这个工具是php自带的,请根据自己的php安装路径修改。
#./configure --with-php-config=/opt/php-5.6.3/bin/php-config --with-pdo-oci=instantclient,/usr,10.2.0.1
//注意--with-php-config是您的php安装目录
//预编译参数详见:[PHP:Oracle(PDO)-手册](https://www.php.net/manual/zh/ref.pdo-oci.php)
#vi pdo_oci.c
//编辑此文件修改部分源码,这里是一个BUG参照:[PHP :: Bug #61479 :: Can't compile with PHP 5.4](https://bugs.php.net/bug.php?id=61479)
//将34行的function_entry改成zend_function_entry
function_entry pdo_oci_functions[] = {
        {NULL, NULL, NULL}
};
//原↑
zend_function_entry pdo_oci_functions[] = {
        {NULL, NULL, NULL}
};
//改成这样↑,保存并退出。
#make && make install
//编译并安装

在配置文件$PHP_PATH/etc/php.ini中添加:extension=pdo_oci.so以启用PDO_OCI模块


OCI8

前往官网下载OCI8源码包:PECL :: Package :: oci8

#wget https://pecl.php.net/get/oci8-1.4.10.tgz
#tar -zxvf oci8-1.4.10.tgz
#cd oci8-1.4.10
//解压并进入目录
#/opt/php-5.6.3/bin/phpize
#./configure --with-php-config=/opt/php-5.6.3/bin/php-config --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib
//预编译参数详见:[PHP: 安装 - Manual](https://www.php.net/manual/zh/oci8.installation.php)
#make && make install
//预编译,编译并安装。

在配置文件$PHP_PATH/etc/php.ini中添加:extension=oci8.so以启用OCI8模块


重启测试PHP

#/opt/nginx/sbin/nginx -s reload
#netstat -plnt
#kill -INT $PHP_PID
//停止PHP
#/opt/php-5.6.3/sbin/php-fpm -c /opt/php-5.6.3/etc/php.ini
//启动PHP注意这里推荐使用-c指定php.ini配置文件的路径。
#echo "<?php phpinfo();?>" > phpinfo.php
//创建phpinfo文件,将此文件放进站点目录,访问此文件:http://IP:PORT/phpinfo.php查看是否安装成功。

如下图即代表启用了OCI8:
image.png


错误处理:

每configure 和make后都执行以下echo $?检查一下有没有错误,非0即代表有错误。

  • PDO_OCI-1.0/pdo_oci.c:34:1: error: unknown type name ‘function_entry’
    此错误是一个BUG,请按照此篇文章修改。上述步骤中也提到过
    PHP :: Bug #61479 :: Can't compile with PHP 5.4

  • checking for oci.h... configure: error: I'm too dumb to figure out where the include dir is in your Instant Client install
    错误大致意思是找不到oci.h 查看Oracle Instant Client是否安装完成,查看环境变量是否书写错误。

  • configure: error: Oracle Instant Client SDK header files not found

  1. 此错误是因为找不到client SDK,检测Oracle Instant Client是否安装完成并查看环境变量是否书写错误。
  2. 如果确认没有问题,可能是版本问题,如果是PHP5.6.3的版本请使用和我一样的版本。其他PHP版本自行测试。

参考:

centos下为php开oracle扩展_只要开心就好-CSDN博客
记录一下PDO_OCI安装过程坑点_JustForDream_ByGhy的博客-CSDN博客
PECL ::包:: PDO_OCI
PECL :: Package :: oci8
PHP :: Bug #61479 :: Can't compile with PHP 5.4
PHP: 安装 - Manual
PHP:Oracle(PDO)-手册

# PHP  Oracle 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×