CentOS6.5下PHP连接Oracle Database环境部署
编译环境准备
安装升级PHP插件和依赖
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
安装InstantClient
在http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html可以下载。
因为环境的问题,本文中安装11.2版的InstantClient,下载以下文件:
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
安装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位的软链接,防止编译出错
安装PHP扩展库
因为生产环境PHP版本过老问题,所以只能下载老版本的PDO_OCI和OCI8,如果环境中PHP版本是最新的,可通过pecl安装这两个PHP扩展库,更为方便。
安装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
编辑config.m4:
在第10行左右找到与下面类似的代码,添加:
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then
PDO_OCI_VERSION=11.2
在第102行左右添加:
11.2)
PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
;;
编译:
phpize
./configure --with-pdo-oci=instantclient,/usr,11.2
make
make install
启用扩展:
touch /etc/php.d/pdo_oci.ini
echo "extension=pdo_oci.so" > /etc/php.d/pdo_oci.ini
可通过
php -m
或者通过phpinfo()函数查看是否安装成功
安装OCI8
下载编译:
wget https://pecl.php.net/get/oci8-2.0.8.tgz
tar -xvf oci8-2.0.8.tgz
cd oci8-2.0.8
phpize
./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib
make
make install
启用扩展:
touch /etc/php.d/oci8.ini
echo "extension=oci8.so" > /etc/php.d/oci8.ini
查看扩展库是否安装成功同上一节
其他
如果不能在生产环境中编译,在生产环境安装好InstantClient后,可以在自己的环境中编译PHP的扩展库,编译好后产生的文件在/usr/lib64/php/modules目录中,分别为oci8.so和pdo_oci.so,将这两个文件上传到生产环境中的相同目录下,并给与755的权限,再创建配置文件激活PHP扩展即可。
测试是否安装成功
<?php
$dbconn=oci_connect('username', 'password', 'hostIP/databasename');
if($dbconn!=false)
{
echo "connect success\n";
if(oci_close($dbconn)==true)
{
echo "close success!\n";
}
}
else
{
echo "connect fail\n";
}
?>
或者
<?php
$conn = oci_connect('username', 'password', 'hostIP/databasename');
$stid = oci_parse($conn, 'select table_name from user_tables');
oci_execute($stid);
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false)
{
foreach ($row as $item)
{
echo "$item\n";
}
}
?>
执行这两个PHP脚本都能测试是否安装成功