用PHP串接oracle
這篇文件是參考自oracle OTN的一份文件rh4_10gr2_php5.txt而來!原本的文件是在RedHat AS4作業系統上安裝oracle database 10gR2,
再加上apache2和php5。
目的在一部機器上設定出可以跑PHP串oracle資料庫的網站平台。
原本的文件rh4_10gr2_php5.txt中就指出了,這是提供參考用,非正式產品功能之一。
不過既然在官網已經置入了這樣的參考文件,表示oracle是正視這樣的平台建置的。
oracle在10g版本推出時,也推了oracle XE版本,已經表明要和MySQL競爭的意圖出來。
相信以PHP結合oracle XE的網站,應該會在日後逐漸增加才是。
我主要目的在說明在一部CentOS4作業系統上建置httpd2、PHP、oracle 10gR2的步驟。
至於在安裝oracle 10gR2的部份,請自行參考OTN的相關說明,
內容大致和安裝在RedHat AS4相同,
因為CentOS4基本上就是由RedHat AS4的開放源始碼,
再編譯而來的linux版本,所以安裝方式,可以說幾乎完全一致!
我也有一份提到安裝oracle database 10R2在CentOS4的blog文件。連結如下:
http://tw.myblog.yahoo.com/bullock0425
安裝的過程中,請儘可能依照FOA格式定義你安裝的oracle database路徑。
你應該會定義幾個重要的環境變數像這樣:
ORACLE_HOME=/opt/u01/app/oracle/product/10.2.0/db_1;export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LC_LIBRARY_PATH; export LD_LIBRARY_PATH
注意!這兩個環境變數將是在安裝PHP5時把oci8函式庫編譯進去的主要關鍵設定值。
現在希望你已經把httpd2和PHP5的source code TARBALL準備好了!
開始囉!請以oracle帳號來執行全部指令動作,因為我們將安裝在$ORACLE_HOME路徑之下。
可以不必用到root權限!
安裝httpd2:
$bzcat httpd-2.0.54.tar.bz2 | tar xf -
$cd httpd-2.0.54
$./configure --prefix=$ORACLE_HOME/apache --enable-so --with-mpm=prefork
$make
$make install
Edit $ORACLE_HOME/apache/conf/httpd.conf and change the port to 8080.
以上一行,是原本文件中的說明,是希望把http的port改成8888,但我改成了8080。
接下來,請照做,以測試你的httpd是否有成功運作。
Start Apache:
$ORACLE_HOME/apache/bin/apachectl start
Start a browser and check that http://localhost:8080
gives the default Apache web page.
Stop Apache:
$ORACLE_HOME/apache/bin/apachectl stop
apache2成功安裝之後,接著我們來安裝PHP5:
$bzcat php-5.0.4.tar.bz2 | tar xf -
$cd php-5.0.4
$./configure --prefix=$ORACLE_HOME/php \
>--with-apxs2=$ORACLE_HOME/apache/bin/apxs \
>--with-config-file-path=$ORACLE_HOME/apache/conf \
>--with-oci8=$ORACLE_HOME --enable-sigchild
$make
$make install
$cp php.ini-recommended $ORACLE_HOME/apache/conf/php.ini
Edit php.in and change display_errors to On:
display_errors = On
Add these lines to the $ORACLE_HOME/apache/conf/httpd.conf file:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Restart Apache:
$ORACLE_HOME/apache/bin/apachectl start
PHP5的部份也幾乎是完全和原來的rh4_10gr2_php5.txt相同。
但是要強調一點是,原來文件中的./configure 中,要設定oci8那一行。
--with-oci8-instant-client=$HOME/instantclient_10_2 \
我一直編譯不過去,有錯誤指出......
Notice: Following unknown configure options were used:
--with-oci8-instant-client=/opt/u01/app/oracle/product/10.2.0/db_1/install_10_2
Check './configure --help' for available options
後來我用./configure --help | grep oci8
找出原來要用 --with-oci8=$ORACLE_HOME 就可以了!
把PHP5安裝好之後,用老方法測試。
造一個使用phpinfo()的網頁。
Create a file $ORACLE_HOME/apache/htdocs/phpinfo.php containing:
<?php phpinfo(); ?>
Load this file in a browser:
http://localhost:8080/phpinfo.php
在這個phpinfo.php網頁中,你應該要能看到一些有關oci8的資訊欄位。
如果有看到,那表示你在編譯安裝PHP5時,
也把串接oracle database 10gR2要用得到的oci8函式庫也編譯進去了。
不過為了證明oci8函式庫能用,原本的rh4_10gr2_php5.txt作者寫了一個測試程式碼。
讓我們試試!
Create a file $ORACLE_HOME/apache/htdocs/test.php containing:
<?PHP
$conn = OCILogon("scott", "tiger", "//localhost/orcl");
if (!$conn) exit;
echo OCIServerVersion($conn) ."\n";
print date('Y-m-d H:i:s')."\n";
$query = 'SELECT * FROM EMP';
$stid = OCIParse($conn, $query);
OCIExecute($stid, OCI_DEFAULT);
print '';
while ($succ = OCIFetchInto($stid, $row, OCI_RETURN_NULLS)) {
print '';
foreach ($row as $item) print '';
print '';
}
print '<table border="1"><tbody><tr><td>'.($item?htmlentities($item):' ').'</td></tr></tbody></table>';
OCILogoff($conn);
?>
因為測試網頁用到scott帳號,如果安裝oracle database 10gR2時忘了解除它的鎖定,
可以參考以下做法:
$sqlplus / as sysdba
SQL> alter user scott account unlock identified by tiger;
SQL> exit
我其它的oracle相關文件! 這裡...
沒有留言:
張貼留言