程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 【ubuntu14.04】搭建PHP5+Apache2+Oracle環境

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

編輯:Oracle教程

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


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數據庫管理擴展,我們需要自行下載並且編譯安裝和配置。


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

 

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

 

 

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.

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後面的所跟的路徑是否正確,應該是我們最後復制到的目錄下。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved