本身后台用的php,现在要连接一个远程的oracle数据库,踩了很多坑,总结一下方法。
ubuntu系统宝塔面板php7.1,安装php oracle扩展,编译oci8.so,远程连接oracle。
一、安装oracle-instantclient 即时客户端库
1:首先到oracle官网下载三个文件:
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
2:我这里选择12.1版本。这三个东西分别是:basic、devel、sqlplus
oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm
3:在服务器建立文件夹,位置如下
/usr/lib 中创建 oracle 文件夹 ,并把上面的三个文件上传到oracle文件夹中
4:打开终端,进入oracle文件夹中
cd /usr/lib/oracle
5:安装alien和依赖包
sudo apt-get install alien libaio1
alien的作用是把rpm包转换成deb包,因为我们是ubuntu系统
6:依次安装安装上面三个东西
sudo alien -i oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
sudo alien -i oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
sudo alien -i oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm
7:安装完成后,应该会生成一个
12.1/client64/lib 的文件目录
二、安装 php的Oracle数据库扩展:oci8
1:下载oci8的对应扩展包
下载地址 http://pecl.php.net/package/oci8
php7.1,所以下载 oci8-2.2.0.tgz
2:解压后,上传到oracle文件夹里。
3:打开终端,cd到oci8-2.2.0目录
cd /usr/lib/oracle/oci8-2.2.0
4:编译安装,注意要找到对应的php版本的文件夹里的phpize文件
/www/server/php/71/bin/phpize
会生成三段文字,如下图
5:上面没问题的话,继续执行以下代码
./configure --with-php-config=/www/server/php/71/bin/php-config --with-oci8=shared,instantclient,/usr/lib/oracle/12.1/client64/lib
make && make install
6:正常的话,会生成一个oci8.so的文件,就在下图中的最后一行的目录中
三、修改php.ini文件
extension=php_oci8_12c.dll;
extension=php_pdo_oci.dll;
引入oci8.so
重启php,检查phpinfo是否有oci8的配置
四、测试连接
<?php
// Oracle数据库连接信息
$oracle_host = "x.x.x.x";
$oracle_port = "15211";
$oracle_service_name = "orcl";
$oracle_username = "xxxx";
$oracle_password = "xxxx";
// 构建连接字符串
$tns = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$oracle_host)(PORT=$oracle_port))(CONNECT_DATA=(SERVICE_NAME=$oracle_service_name)))";
// 连接到Oracle数据库
$conn = oci_connect($oracle_username, $oracle_password, $tns);
if (!$conn) {
echo "连接oracle失败!";exit;
}
// 查询表的个数统计
$query = "SELECT COUNT(*) as table_count FROM user_tables";
$stid = oci_parse($conn, $query);
oci_execute($stid);
$row = oci_fetch_assoc($stid);
$tableCount = $row['TABLE_COUNT'];
oci_free_statement($stid);
oci_close($conn);
echo "远程oracle数据库共有数据表的个数是: " . $tableCount;
?>