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脚本都能测试是否安装成功

posted @ 2018-07-22 23:31  EmrysChe  阅读(405)  评论(0编辑  收藏  举报