Oracle 10g 釋出後,官方逐步加強對 PHP 的支援。本文記錄在 Linux (Fedora Core 3) 上整合 Oracle 10g R1 (10.1.0.2)、Apache 2.0.52 與 PHP 5.0.2 的完整流程,適合快速建置開發環境並體驗 PDO 等新功能。
三者關係:Apache 透過 mod_php 載入 PHP 模組,PHP 再經由 OCI8 擴展連接 Oracle 資料庫。
ORACLE_HOME, ORACLE_SID 已設定)tar -zxvf httpd-2.0.52.tar.gz cd httpd-2.0.52 ./configure --prefix=/usr/local/apache --enable-module=so make clean && make && make install # 啟動/停止測試 /usr/local/apache/bin/apachectl start /usr/local/apache/bin/apachectl stop
建立管理腳本 /bin/startapache、/bin/stopapache 並加入 Oracle 環境變數,方便日後控制。
tar -xjf php-5.0.2.tar.bz2
cd php-5.0.2
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.1.0/db_1
export ORACLE_SID=TEST
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
./configure --with-apxs2=/usr/local/apache/bin/apxs \
--with-oci8=$ORACLE_HOME
make clean && make && make install
cp php.ini-dist /usr/local/lib/php.ini
編輯 /usr/local/apache/conf/httpd.conf,加入:
LoadModule php5_module modules/libphp5.soAddType application/x-httpd-php .php
重新啟動 Apache 後,以 phpinfo() 驗證 Configure Command 包含 --with-oci8 路徑。
<?php
$db = ocilogon("scott", "tiger", "TEST");
$stmt = ociparse($db, "SELECT ename, sal FROM emp");
ociexecute($stmt);
$nrows = ocifetchstatement($stmt, $results);
echo "<table><tr><th>Name</th><th>Salary</th></tr>";
for ($i=0; $i<$nrows; $i++) {
echo "<tr><td>".$results["ENAME"][$i]."</td>";
echo "<td>$".number_format($results["SAL"][$i],2)."</td></tr>";
}
echo "</table>Rows: $nrows";
?>