Php

如何在 Ubuntu 18.04 上安裝 Oracle OCI8 即時客戶端

  • February 12, 2020

我想分享一些關於我的 OCI8 安裝以訪問 Oracle 數據庫的資訊。

如果您遇到類似“ PHP Startup: Unable to load dynamic library ‘oci8.so’ ”之類的錯誤

或“檢查 Oracle Instant Client 庫版本兼容性…配置:錯誤:從 libclntsh.so 連結到 /opt/oracle/instantclient/libclntsh.so.*.1 未找到

或者只是想安裝 Quick&Easy OCI8 以在您的 php 和 Oracle 數據庫之間建立連接,您來對地方了!

第一個先決條件是工作的 apache2 和 php7.2 (Ubunti 18.04) 環境。

  1. 從 Oracle 網站http://下載基本包(如 instantclient-basic-linux.x64-12.2.0.1.0.zip)和 sdk(instantclient-sdk-linux.x64-12.2.0.1.0.zip)包www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html
  2. 將這兩個文件上傳到您的網路伺服器,您可以使用 WinSCP
  3. 在伺服器上解壓縮這兩個文件,在我的例子中,你會得到一個名為“instantclient_12_2”的新文件夾

4a。創建目標文件夾

mkdir /opt/oracle

4b。移動和重命名 Instantclient 文件夾

mv instantclient_12_2 /opt/oracle/instantclient

4c。更改文件夾的權限

chown -R root:www-data /opt/oracle

  1. 檢查您是否有安裝 OCI8 所需的軟體包

apt install php7.2-dev php-pear build-essential libaio1

  1. 創建必要的軟連結

ln -s /opt/oracle/instantclient/libclntsh.so.12.1 /opt/oracle/instantclient/libclntsh.so

ln -s /opt/oracle/instantclient/libocci.so.12.1 /opt/oracle/instantclient/libocci.so

7a。將即時客戶端添加到 ld 配置文件

迴聲 /opt/oracle/instantclient > /etc/ld.so.conf.d/oracle-instantclient.conf

7b。更新動態連結器執行時綁定

配置文件

8a。現在通過 pecl 安裝 OCI8

pecl安裝oci8

8b。OCI8 安裝要求您提供正確的文件夾

即時客戶端,/opt/oracle/instantclient

9a。將 oci lib 添加到 cli php 配置(控制台 php)

迴聲“擴展= oci8.so”>> /etc/php/7.2/cli/php.ini

9b。將 oci lib 添加到 apache php 配置中

迴聲“擴展= oci8.so”>> /etc/php/7.2/apache2/php.ini

10a。為 cli 版本設置環境變數(之後您需要重新啟動伺服器)

echo “LD_LIBRARY_PATH="/opt/oracle/instantclient"” >> /etc/environment

echo “ORACLE_HOME="/opt/oracle/instantclient"” >> /etc/environment

10b。為 apache 版本設置環境變數

echo “export LD_LIBRARY_PATH="/opt/oracle/instantclient"” >> /etc/apache2/envvars

echo “export ORACLE_HOME="/opt/oracle/instantclient"” >> /etc/apache2/envvars

  1. 重啟阿帕奇

服務 apache2 重啟

  1. 大功告成,現在可以測試與 Oracle 數據庫的連接

=PHP 連接範例=

<?php
// Create connection to Oracle, change HOST IP and SID string!
$db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 000.000.000.000)(PORT = 1521)))(CONNECT_DATA=(SID=XXX)))";
// Enter here your username (DBUSER) and password!
$conn = oci_connect("DBUSER", "PASSWORD",$db);
if (!$conn) {
  $m = oci_error();
  echo $m['message']. PHP_EOL;
  exit;
}
else {
  print "Oracle database connection online". PHP_EOL;
}

?>

引用自:https://serverfault.com/questions/911475