Linux系统,使用PHP连接ORACLE数据库


首先安装ORACLE的InstantClient环境:在这里下载

因为我需要连接11.2.0.4.0版本的ORACLE数据库,所以选取下载了basic-11.2.0.4.0-1.x86_64.rpm和devel-11.2.0.4.0-1.x86_64.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

 

64位系统需要创建32位对应的软链接,原因不明,但经实测如果不创建、后续安装扩展时的编译过程确实会出问题:

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

 

接下来创建对应环境变量:

vim /etc/profile.d/oracle.sh
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

保存后执行source使更改生效:

source /etc/profile.d/oracle.sh

 

使用hostname命令查看当前系统主机名,并将主机名加入hosts文件:

vim /etc/hosts

# 加入这一行
127.0.0.1 主机名

 


 

接下来根据你要使用的数据库连接方式选择安装对应的PHP扩展,

如果要使用PDO连接,就安装PDO_OCI;如果要使用oci_connect函数链接,就安装OCI8。

以下逐一说明安装步骤。

 


 

安装PDO_OCI

首先下载并解压源码包:

wget https://pecl.php.net/get/PDO_OCI-1.0.tgz
tar -xvf PDO_OCI-1.0.tgz
cd PDO_OCI-1.0

 

这玩意1.0版本后再也没更新过,默认是不支持11.2版本的,需要按以下操作修改源码:

vim config.m4

#在第10行左右,有很多elif,在其中添加如下语句
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then
  PDO_OCI_VERSION=11.2

#转到第100行往下找,找到格式与下方代码相似的部分并添加如下语句
11.2)
  PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
  ;;

编辑完成后保存即可。

 

先尝试编译安装,如果过程中报function_entry相关的错误则进行如下操作:

vim pdo_oci.c

将34行的function_entry修改为zend_function_entry

 

开始编译安装:

phpize
./configure --with-pdo-oci=instantclient,/usr,11.2
make
make install

 

安装完成后修改php.ini文件中添加一行:

extension=pdo_oci.so

 

重启服务即可。

 

可以使用phpinfo()验证安装,出现以下内容则代表安装成功:

 


 

安装OCI8
首先下载并解压源码包:

wget https://pecl.php.net/get/oci8-2.0.12.tgz
tar -xvf oci8-2.0.12.tgz
cd oci8-2.0.12

这一步是基于我使用的PHP版本选择了2.0.12,你可以在这里挑选合适自己的版本。

 

 然后直接编译安装:

phpize
./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib
make
make install

 

安装完成后修改php.ini文件中添加一行:

extension=oci8.so

 

重启服务即可。

 

可以使用phpinfo()验证安装,出现以下内容则代表安装成功:

 

posted @ 2023-05-25 10:33  何效名  阅读(308)  评论(0编辑  收藏  举报