Ubuntu 14.04搭建PHP5+Apache2+Oracle環境
最近開發的一個項目,資料庫使用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版本:5.5.9-1ubuntu4.6
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
根據自己的系統進入相應的列表,分別下載對應的instantclient-basic-xxx.zip和 instantclient-sdk-xxx.zip。
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
完成了這一步之後,我們就可以將oracle的instantclient檔案夾整個移動到我們預先安排好的位置,推薦的位置是:
/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
4.下載並編譯oci8.so
sudo pecl install oci8
然後接下來會自動下載oci8的源碼包並自動進行編譯,然後會在過程中提示你輸入instantclient的相關路徑變數:輸入
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
如果沒有類似的提示,那麼恭喜你,一定是這個過程出錯了。我們先假設到此為止一直都是順利的。到現在我們成功地編譯了oci8.so這個擴充。接下來就是將其分配到使用環境中去了。
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
[html] view plaincopyprint?在CODE上查看代碼片派生到My Code片
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/apache2 restart
重啟完成後,在伺服器根目錄裡建立一個test.php檔案,並寫入:
<?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.
通過如下進行解決:
給php編譯安裝Fileinfo的時候,報configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.看了下說是要re2c這個東西.
解決辦法:
wget http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download
tar zxf re2c-0.13.5.tar.gz && cd re2c-0.13.5
./configure
make && make install
然後再去編譯安裝Fileinfo,就不會報re2c的錯誤了.
2.編譯過程出現庫檔案無法找到:
configure: error: Oracle Instant Client libraries libnnz.so and libclntsh.so not found
檢查你在建立軟連結的時候是否是通過命令列建立的
3.checking Oracle Instant Client SDK header directory... configure: error: Oracle Instant Client SDK header files not found
你的sdk檔案夾是否位於instantclient目錄下。
4.ERROR: `/tmp/pear/temp/oci8/configure --with-oci8=instantclient,/usr/local/lib/instantclient' failed
--with-oci8後面的所跟的路徑是否正確,應該是我們最後複製到的目錄下。
Ubuntu 14.04安裝Oracle資料庫管理軟體SQL Developer記錄
整個過程思路如下:
1.檢查本地的jdk版本,如果過舊,則重新設定JDK環境
2.從oralce官方下載對應版本的sqldeveloper
3.解決sqldeveloper中文顯示亂碼
4.設定從命令列運行
安裝過程:
1.檢查本地jdk版本:
java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
上面是我的系統上jdk版本,如果你的版本過低,強烈建議你升級jdk版本。否則下面安裝最新版本的sqldeveloper過程中,啟動會提示jdk版本過低。
目前oracle官網上給出的最新版本jdk是1.8,我們直接存取下面網址下載對應版本的jdk:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
具體版本需要依據你的系統來定,例如我的系統是ubuntu X64 14.04,則下載jdk-8u31-linux-x64.tar.gz版本。切記不要下載rpm格式的安裝包。我們是debian/ubuntu類型的系統,不支援rpm安裝檔案。
下載完成,解壓該檔案,然後檢查你的系統是否有安裝過jdk,也即檢查你的系統有沒有如下目錄:
/usr/lib/jvm
如果沒有,使用
sudo mkdir /usr/lib/jvm
建立目錄。如果有,則直接將我們下載下來解壓好的jdk檔案夾整個複製到該目錄下。
接下來,配置jdk的環境變數:
sudo vim ~/.profile
在該檔案下面添加如下語句:
##For jdk1.8.0_31 PATH
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_31
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
JAVA_HOME常量的路徑需要依據你的實際情況進行配置。
然後是使得該配置立即生效:
source ~/.profile
不出意外,此時你再次通過java -version命令查看你的jdk版本,就可以看到和我上面一致的輸出了。
即使你的系統原來已經安裝過了舊版本的jdk,也不必對原來的jdk進行處理。這一過程會自動將系統的jdk設定為最新安裝的版本。
2.從oracle官方下載最新版本的oracle sqldeveloper安裝包:
http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/sqldev-41ea-2372780.html
下載時,由於是ubuntu系統,在版本選擇時,請選擇Other Platform版本。
下載完成後解壓,將其放置在使用者的主目錄下,例如我的是~/giantchan/。
然後通過命令列進入該檔案夾:
cd ~/使用者名稱/sqldeveloper
運行sqldeveloper.sh
sudo ./sqldeveloper.sh
在第一次啟動時,會提示你輸入jdk的路徑。如何查看jdk的路徑呢?
which javac
我們可以通過該命令列印出jdk的目錄:
/usr/lib/jvm/jdk1.8.0_31/bin/javac
我們截取到jdk1.8.0_31/這裡的路徑,也即:
/usr/lib/jdk1.8.0_31
切記不要帶“/bin/javac”,否則會報錯,原因是sqldeveloper.sh會自動尋找該目錄下的bin目錄。如果加上bin目錄的路徑,就會重複。
如果不小心添加了bin目錄,我們可以到/home/使用者名稱/.sqldeveloper/4.1.0(版本號碼)/product.conf
sudo vim /home/使用者名稱/.sqldeveloper/4.1.0(版本號碼)/product.conf
找到如下語句,將後面的路徑修改真正的jdk的路徑:
SetJavaHome /usr/lib/jvm/jdk1.8.0_31
修改完成後儲存退出。
重新運行./sqldeveloper.sh檔案。此時發現可以正常啟動sqldeveloper了。但是用戶端的介面仍然會出現中文亂碼。接下來第三步是解決亂碼問題。
3.解決sqldeveloper在ubuntu下的亂碼問題:
我們從網上下載任何一個中文的字型ttf檔案(一定是要ttf)。
然後按照教程一步一步操作:
cd JAVA_HOME/jre/lib/fonts
sudo mkdir fallback
cd fallback
cp msyh.ttf ./ #此處的msyh.ttf是字型檔,此處使用的是微軟雅黑,也可以用其他字型檔,只要支援中文即可。
sudo mkfontdir
sudo mkfontscale
然後重啟sqldeveloper即可。至此,sqldeveloper已經成功安裝到了ubuntu上,可以正常運行了。
4.從命令列運行:
我們可以在~/.bashrc檔案中添加如下命令:
#oracle sqldeveloper
alias sqld='cd ~/使用者名稱/sqldeveloper && sudo ./sqldeveloper.sh'
然後通過source命令使設定立即生效:
source ~/.bashrc
以後就可以通過sqld命令來啟動sqldeveloper軟體了。