ubuntu 安装php7.2 oracle扩展
一:介绍
php要连接访问oracle需要安装三个东西
1:Oracle Instant Client:即时客户端库
2:php的Oracle数据库扩展:oci8
3:php连接pdo的oci扩展:pdo_oci
原理:oci8提供php驱动,封装方法,php通过oci8内置的方法连接Oracle Instant Client,实现链接、操作oracle。然后通过pdo_oci供php语言操作。
二:安装oracle即时客户端
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:安装alien和依赖包
sudo apt-get install alien libaio1alien的作用是把rpm包转换成deb包,因为我们是ubuntu系统
4:依次安装安装上面三个东西
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
alien -i:把rpm装成deb安装
如果没有报错的话,安装的默认位置在这:/usr/lib/oracle/
三:安装 php的Oracle数据库扩展:oci8
我们通过pecl来安装
1:安装pecl命令
apt-get install php-pear
2:安装php-dev,因为pecl会用到phpize,而这个东西在php-dev里面
apt-get install -y php7.2-dev
3:更新一下pecl channel
sudo pecl channel-update pecl.php.net4:到 pecl官网看下,这玩意儿怎么用 https://pecl.php.net/package/oci8
这里说的很清楚,我们直接干。
5:安装oci8
pecl install oci8-2.2.0回车后出现这个画面:
downloading oci8-2.2.0.tgz ... Starting to download oci8-2.2.0.tgz (196,449 bytes) .........................................done: 196,449 bytes 11 source files, building running: phpize Configuring for: PHP Api Version: 20170718 Zend Module Api No: 20170718 Zend Extension Api No: 320170718 Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] :把我们安装oracle即时客服端的位置写进去,上面红色标注。然后回车:
instantclient,/usr/lib/oracle/12.1/client64/lib
如果一切顺利的话,最终是这个画面:
Build process completed successfully Installing '/usr/lib/php/20170718/oci8.so' install ok: channel://pecl.php.net/oci8-2.2.0 configuration option "php_ini" is not set to php.ini location You should add "extension=oci8.so" to php.ini说明大功告成了
四:安装pdo_oci扩展
我的php 是apt install 安装,执行:apt-cache search php7.2,发现没有pdo_oci,没有的话我们就去官网下载源码编译安装。首先查看php版本,然后下载对应版本的php源码。
# php -v PHP 7.2.24-0ubuntu0.18.04.9 (cli) (built: Aug 16 2021 05:46:32) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.24-0ubuntu0.18.04.9, Copyright (c) 1999-2018, by Zend Technologies
下载后解压,进入ext/pdo_oci准备编译
tar -xvf php-7.2.24.tar.gz cd php-7.2.24/ext/pdo_oci
编译安装:
phpize ./configure --with-pdo-oci=instantclient,/usr/lib/oracle/12.1/client64/lib make make install./configure 后面这一串和安装oci8的时候完全一样
五:加入php.ini
我们可以查看一下扩展的位置:
# php -i | grep "extension_dir" extension_dir => /usr/lib/php/20170718 => /usr/lib/php/20170718
然后加入php.ini配置
extension=oci8.so extension=pdo_oci.so注意:extension=extension=oci8.so 一定要加载pdo.so的后面,不能在前面加载,注意加载顺序
然后重启一下fpm
五:php连接oracle
<?php try{ $conn = new \PDO('oci:dbname=192.168.1.102/orcl;charset=utf8', 'user', 'password'); $conn ->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); print_r($result); }catch(PDOException $e){ echo $e->getMessage(); //异常 }