在 Homestead 环境下为 PHP 添加 Oracle 数据库扩展(OCI)
个人学习、练手的项目需要连接Oracle数据库,但是homestead环境中php默认未添加Oracle数据库扩展,以下是OCI扩展安装操作过程记录。
1.参考资料
Homestead Oracle instant client (oci8, pdo_oci)
Ubuntu PHP7 安装PDO Oracle和OCI8
2. 软件版本
homestead v7.8.0
php 7.2.19
3. 操作过程
3.1.准备
ssh登录homestead
$ vagrant ssh
cd ~
apt安装必要软件包
sudo apt-get update
sudo apt-get install -y alien wget # 用于安装 rpm 格式软件包
sudo apt-get install php7.2-dev # 用于安装 phpize
sudo apt-get install php-pear
sudo apt-get install libaio1
下载oracle简易客户端
从Oracle官网下载oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm和
oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm ,复制到 homestead~/
下;
3.2.安装配置
安装oracle简易客户端,默认安装路径:/usr/lib/oracle/12.2/client64
sudo alien -i oracle-instantclient*-basic-*.rpm
sudo alien -i oracle-instantclient*-devel-*.rpm
配置oracle简易客户端
sudo sh -c 'echo "env[ORACLE_HOME] = /usr/lib/oracle/12.2/client64" >> /etc/php/7.2/fpm/pool.d/www.conf'
sudo sh -c 'echo "env[LD_LIBRARY_PATH] = /usr/lib/oracle/12.2/client64/lib" >> /etc/php/7.2/fpm/pool.d/www.conf'
sudo sh -c 'echo "/usr/lib/oracle/12.2/client64/lib" >> /etc/ld.so.conf.d/oracle.conf'
sudo ldconfig # 更新动态链接器运行时绑定
sudo sh -c 'echo "export ORACLE_HOME=/usr/lib/oracle/12.2/client64/" >> /etc/profile'
sudo sh -c 'echo "export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64:\$LD_LIBRARY_PATH" >> /etc/profile'
sudo sh -c 'echo "export NLS_LANG=\"AMERICAN_AMERICA.AL32UTF8\"" >> /etc/profile'
source /etc/profile # 启用 profile 文件
安装oci8
# 下载已安装 php7 版本对应的 oci8 包,详情见:https://pecl.php.net/package/oci8
sudo pecl download oci8-2.2.0.tgz
sudo pecl install oci8-2.2.0.tgz
安装 pdo oci
wget -nv http://th1.php.net/distributions/php-7.2.19.tar.gz # 下载已安装 php 版本对应的 php 源码包
tar xzf php-7.2.19.tar.gz
cd php-7.2.19/ext/pdo_oci
sudo phpize
sudo ./configure --with-pdo-oci=instantclient,/usr/lib/oracle/12.2/client64/lib
sudo make
sudo make install
添加 oci8.so、pdo oci 扩展到 php.ini’
sudo sh -c 'echo "extension=oci8.so" >> /etc/php/7.2/fpm/php.ini'
sudo sh -c 'echo "extension=pdo_oci.so" >> /etc/php/7.2/fpm/php.ini'
sudo touch /etc/php/7.2/fpm/conf.d/20-oci.ini
sudo sh -c 'echo "extension=oci8.so" >> /etc/php/7.2/fpm/conf.d/20-oci.ini'
sudo touch /etc/php/7.2/fpm/conf.d/20-pdo_oci.ini
sudo sh -c 'echo "extension=pdo_oci.so" >> /etc/php/7.2/fpm/conf.d/20-pdo_oci.ini'
4. 验证
重启homestead
检查oci8
ldd /usr/lib/php/20170718/oci8.so
以下显示表示oci8.so安装正确:
检查pdo_oci
ldd /usr/lib/php/20170718/pdo_oci.so
以下显示表示pdo_oci.so安装正确:
phpinfo()验证
代码验证
<?php
//pdo_oci
$serverHost = "127.0.0.1";
$serverPort = "1521";
$username = "username";
$password = "password";
$dbName = "dbName";
$dsn = "oci:dbname=$serverHost/$dbName;charset=UTF8";
try {
$crmPdo = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
echo('Oracle数据库连接失败( pdo_oci ):' . $e->getMessage());
}
//oci8
$dbstr = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ORACLEIP)(PORT=1521))(CONNECT_DATA=(SID=ORACLESID)))";
if ($conn = oci_connect($username, $password, $dbstr)):
print "CONNECTED OK!!";
else:
print "'Oracle数据库连接失败( oci8 )";
endif;
本作品采用《CC 协议》,转载必须注明作者和本文链接
添加 oci8.so、pdo oci 扩展到 php.ini