Oracle 官方不支援 Ubuntu,需手動安裝 Instant Client Basic + SDK、建立軟連結、編譯 OCI8 擴展。本文記錄從相依套件安裝到 PHP 整合的完整步驟,並針對常見編譯錯誤(找不到 SDK、庫版本號、路徑錯誤)給出解決方案。
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install php5-dev build-essential php-pear libaio1 unzip make
instantclient-basic-linux.x64-12.1.0.2.0.zipinstantclient-sdk-linux.x64-12.1.0.2.0.zipunzip instantclient-basic-linux.x64-12.1.0.2.0.zip
unzip instantclient-sdk-linux.x64-12.1.0.2.0.zip
# 重命名移除版本號
mv instantclient_12_1 instantclient
mv instantclient_12_1/sdk instantclient/sdk # 將 sdk 移入 instantclient 目錄
instantclient/ 目錄建立無版本號軟連結(**必須用 ln -s,不可用圖介面**):
cd instantclient
ln -s libclntsh.so.12.1 libclntsh.so
ln -s libocci.so.12.1 libocci.so
ln -s libnnz12.so libnnz.so
sudo mv instantclient /usr/local/lib/
sudo chmod 777 -R /usr/local/lib/instantclient/
/etc/environment):
LD_LIBRARY_PATH="/usr/local/lib/instantclient"
TNS_ADMIN="/usr/local/lib/instantclient"
ORACLE_BASE="/usr/local/lib/instantclient"
ORACLE_HOME=$ORACLE_BASE
生效:重新登入或 source /etc/environment。sudo pecl install oci8
提示輸入路徑時鍵入:
instantclient,/usr/local/lib/instantclient
成功訊息:
Build process completed successfully
Installing '/usr/lib/php5/20121212/oci8.so'
You should add "extension=oci8.so" to php.ini
sudo vim /etc/php5/apache2/conf.d/oci8.ini
# 內容:
extension=oci8.so
sudo /etc/init.d/apache2 restart
建立 /var/www/html/test.php:
<?php phpinfo(); ?>
瀏覽器開啟 https://localhost/test.php,搜尋 OCI8 區塊應顯示:
OCI8 Support: enabled
OCI8 Version: 2.0.8
Oracle Run-time Client Library Version: 12.1.0.2.0
Oracle Compile-time Instant Client Version: 12.1
| 錯誤訊息 | 原因 | 解決 |
|---|---|---|
| configure: WARNING: You will need re2c 0.13.4+ | 缺少 re2c | sudo apt-get install re2c(非阻斷) |
| Oracle Instant Client libraries libnnz.so and libclntsh.so not found | 軟連結未建立或建立位置錯誤 | 確認在 instantclient/ 目錄下用 ln -s 建立三個 .so 連結 |
| Oracle Instant Client SDK header files not found | sdk 目錄未放入 instantclient/ | 執行 mv sdk instantclient/ 使 sdk 與 .so 同層 |
| --with-oci8=instantclient,/path failed | pecl 提示路徑錯誤 | 輸入 instantclient,/usr/local/lib/instantclient(逗號分隔) |
tnsnames.ora 放入 $TNS_ADMIN(即 /usr/local/lib/instantclient)。pecl install oci8-2.2.0 對應版本。完成上述步驟,Ubuntu 即可透過 PHP OCI8 穩定連線 Oracle 資料庫。