【ubuntu14.04】搭建PHP5+Apache2+Oracle環境,ubuntu14.04php5

來源:互聯網
上載者:User

【ubuntu14.04】搭建PHP5+Apache2+Oracle環境,ubuntu14.04php5

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版本:5.5.9-1ubuntu4.6


PHP安裝時不會內建oracle資料庫管理擴充,我們需要自行下載並且編譯安裝和配置。

這裡我主要參考以下這篇文章:

https://help.ubuntu.com/community/PHPOracle
http://blog.sina.com.cn/s/blog_8f4fbe030100y5q3.html


網上有很多的相關教程,主要分為兩類,但是主要思路都如下:

1.從oracle官網下載instantclient basic和instantclient sdk安裝包;

2.解壓,建立庫檔案軟連結;

3.下載並編譯php oci8.so

4.配置PHP

差別在於,有的是直接下載php oci8.so檔案,解壓同時手動進行編譯,或者如我上面參考的教程所教,直接使用pear命令下載並自動編譯。


重點在於,在按照教程操作的過程中會出現諸多意料不到的問題,接下來我先按照我成功配置的過程寫出教程,然後再解釋我遇到的問題以及解決方案:

1.解決依賴問題:

sudo apt-get updatesudo 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 ClientLD_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 successfullyInstalling '/usr/lib/php5/20121212/oci8.so'install ok: channel://pecl.php.net/oci8-2.0.8configuration option "php_ini" is not set to php.ini locationYou 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

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.
  通過如下文章進行解決:

 http://blog.slogra.com/post-421.html
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後面的所跟的路徑是否正確,應該是我們最後複製到的目錄下。

如果遇到其他的問題,歡迎留下評論一起交流。


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.