RT
最近開發的一個項目,數據庫使用oracle。oracle本身支持Red Hat,對ubuntu的支持並不好,如果ubuntu需要安裝oracle,系統本身需要做偽裝等很多工作,所以我只打算使用遠程服務器上的oracle數據庫。
本地環境:
Linux xxx-ThinkPad-T400 3.13.0-46-generic #75-Ubuntu SMP Tue Feb 10 15:24:04 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
PHP安裝時不會自帶oracle數據庫管理擴展,我們需要自行下載並且編譯安裝和配置。
1.從oracle官網下載instantclient basic和instantclient sdk安裝包;
2.解壓,創建庫文件軟鏈接;
3.下載並編譯php oci8.so
4.配置PHP
差別在於,有的是直接下載php oci8.so文件,解壓同時手動進行編譯,或者如我上面參考的教程所教,直接使用pear命令下載並自動編譯。
重點在於,在按照教程操作的過程中會出現諸多意料不到的問題,接下來我先按照我成功配置的過程寫出教程,然後再解釋我遇到的問題以及解決方法:
1.解決依賴問題:
sudo apt-get update sudo apt-get upgrade
sudo apt-get install php5-dev build-essential php-pear libaio1
sudo apt-get install unzip make
2.從oracle官網下載Instant Client
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
3.解壓,創建庫文件軟鏈接;
這一步的處理非常重要,如果處理不當,將會導致下面的編譯步驟無法通過。
3.1解壓文件,並將兩個文件夾去掉版本號。也即instantclient和sdk,然後,將sdk文件夾整個移動到instantclient目錄下,和其他的庫文件並存。網上的其他教程大多沒有說明這兩個文件夾的存放關系,或者是直接將其放在同一級目錄下,導致後面編譯過程中總是提示無法找到sdk。這裡我們一定要把sdk文件夾移動到instantclient目錄下。不能參照網上其他的教程。
3.2創建庫文件軟鏈接,進入instantclient目錄下,在該目錄下創建文件軟鏈接(其他教程多不說明鏈接文件的存放位置)。注意,這裡不可直接通過右鍵來生成庫文件的鏈接:
ln -s libnnz12(version number).so libnnz.so如上,去掉原來庫文件中的版本信息,生成沒有版本信息的擴展庫文件鏈接;
同時,我們需要生成
ln -s libclntsh.so.12.1 libclntsh.so
ln –s libocci.so.12.1 libocci.so
/usr/local/lib/
sudo chmod 777 -R /usr/local/lib/instantclient/然後配置我們接下來可能需要的一些系統常量,:
sudo vim /etc/environment在文件的末尾加上如下常量:
# Oracle Instant Client LD_LIBRARY_PATH="/usr/local/lib/instantclient" TNS_ADMIN="/usr/local/lib/instantclient" ORACLE_BASE="/usr/local/lib/instantclient" ORACLE_HOME=$ORACLE_BASE
sudo pecl install oci8
instantclient,/usr/local/lib/instantclient
Build process completed successfully Installing '/usr/lib/php5/20121212/oci8.so' install ok: channel://pecl.php.net/oci8-2.0.8 configuration option "php_ini" is not set to php.ini location You should add "extension=oci8.so" to php.ini
5.配置PHP
我們可以在php.ini中直接開啟extension,但是現在PHP不推薦如此操作,所以我們這樣子操作:由於我的服務器是ubuntu+apache,所以操作方法如下:
在/etc/php5/apache2/conf.d中新建oci8.ini這個文件,apache2/conf.d這個目錄下,會發現所有的插件前面都有數字,這裡我們不用管,直接忽略:
sudo vim /etc/php5/apache2/conf.d/oci8.ini然後在文件中添加開啟oci8.so這個語句,
extension=oci8.so然後重啟apache
sudo /etc/init.d/apache2 restart
<?php phpinfo() ?>
查看在PHP頁面中是否有出現類似下面的內容:
OCI8
OCI8 Support enabled OCI8 DTrace Support disabled OCI8 Version 2.0.8 Revision $Id: f04114d4d67cffea4cdc2ed3b7f0229c2caa5016 $ Oracle Run-time Client Library Version 12.1.0.2.0 Oracle Compile-time Instant Client Version 12.1
如果打印出了如下信息,則表示我們的配置到此已經成功。
下面是debug環節:
1.編譯過程出現:
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
2.編譯過程出現庫文件無法找到: configure: error: Oracle Instant Client libraries libnnz.so and libclntsh.so not found 檢查你在創建軟鏈接的時候是否是通過命令行創建的