在Linux上為PHP配置OCI8連線

科技小能手發表於2017-11-12
Oracle 11g 客戶端可以很方便地幫助PHP連線到遠端Oracle資料庫。本問介紹如何安裝PHP以及其OCI8 擴充套件以及 Oracle客戶端到Windows和Linux平臺上。更詳細的介紹可以閱讀這裡The Underground PHP and Oracle Manual。 OCI8是PHP的擴充套件元件用以連線和操縱Oracle資料庫(該名字源於Oracle中’C call interface’ API介面,該API最早在Oracle8中公佈)。OCI 8 是開源的且已包括在PHP中了。 Oracle 簡潔客戶端(Instant Client)是一套免費且易安裝的庫檔案,可以允許應用程式連線到遠端資料庫中。當Oracle資料庫Sever端在本地時,該客戶端不再是必要的。 當使用11g客戶端,其中的OCI8 函式將支援Oracle 9.2,10.x,以及11.x的資料庫。 軟體需求:
軟體 注意
Oracle Instant Client 下載”Instant Client Package – Basic”,也需要” Instant Client Package – SDK”
Apache HTTPD Server 版本1或2均可
PHP – PHP Hypertext Processor 版本 5.2

在Linux平臺上啟用PHP的OCI8擴充套件 在Linux平臺上PHP往往需要重新編譯。若使用者使用Oracle Enterprise Linux,則預編譯好的PHP RPM包可以直接從oss.oracle.com上下載。 為了搭建PHP和OCI8: 1. 你需要下載Apache HTTPD Server,且下載PHP 5.2 source code 即PHP 5.2原始碼,根據安裝手冊安裝PHP與APACHE。在這裡不需要為OCI8配置什麼。 2. 從OTN上下載基礎和SDK客戶端包,地址:Instant Client page。ZIP或RPM格式均可。 開始安裝包:

rpm -Uvh oracle-instantclient11.1-basic-11.1.0.7.0-1.i386.rpm

rpm -Uvh oracle-instantclient11.1-devel-11.1.0.7.0-1.i386.rpm

以上第一個RPM包將Oracle庫檔案安置在usr/lib/oracle/11.1/client/lib,而第二個在/usr/include/oracle/11.1/client建立標頭檔案。 3. 從PECL上下載最新的OCI 8 1.3.5擴充套件將覆蓋PHP 5.2原始碼中的預設版本。手動下載並如此安裝: pecl install oci-1.3.5.tgz 或最新版本可直接如此下載安裝: pecl install oci8 輸出如下: downloading oci8-1.3.5.tgz … Starting to download oci8-1.3.5.tgz (137,987 bytes) …..done: 137,987 bytes 10 source files, building running: phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519 1. Please provide the path to the ORACLE_HOME directory. Use `instantclient,/path/to/instant/client/lib` if you`re compiling with Oracle Instant Client : autodetect 1-1, `all`, `abort`, or Enter to continue:

若您安裝了Instant Client RPM包,回車後PECL將自動定位RPM包並安裝OCI8.so共享庫檔案。 4. 修改php.ini並確認extension_dir 指向了oci8.so所在目錄 並在php.ini中加上: extension=oci8.so,啟用oci 8。 5. 將Instant Client(簡潔客戶端)的目錄新增到/etc/ld.so.conf中,或手動設定LD_LIBRARY_PATH包含目錄/usr/lib/oracle/11.1/client/lib,並重啟Apache。 在重啟Apache前要設好Oracle環境變數,如下指令碼: #!/bin/sh LD_LIBRARY_PATH=/usr/lib/oracle/11.1/client/lib:${LD_LIBRARY_PATH} export LD_LIBRARY_PATH echo Starting Apache /usr/sbin/apachectl start 以上指令碼未設定NLS_LANG等語言環境變數,即使用預設環境。 現在來確認擴充套件是否正確安裝,我們可以通過以下php指令碼予以確認: <?php phpinfo(); ?> 自瀏覽器開啟該指令碼地址URL,如http://localhost/phpinfo.php,若顯示頁面出現”oci8”說明配置成功。 下面我們嘗試連線Oracle資料庫,Oracle授權以及資料庫資訊會返回給oci_connect()函式以建立連線。一般我們要用到一個tnsname以便遠端連線,不懂得話建議你閱讀下Oracle的基礎文件,除了Net connection identifier(網路連線id 可能是tnsname也可能是easyconnect字串等)外當然還需要使用者名稱和密碼。有好幾種方法可以通過PHP連線資料庫,下面是其中一個示例使用Oracle的EasyConnect語法的連結標示並要求以HR使用者模式登陸名為MYDB的遠端資料庫: $c = oci_connect(`hr`, `hr_password`, `//mymachine.mydomain/MYDB`); 您可能需要閱讀Oracle Using the Easy Connect Naming Method文件以便了解EasyConnect。 注意在資料庫中HR使用者可能被鎖住了,我們假設你是一位稱職的DBA,可以很容易解決這類問題。 開始嘗試在PHP上使用Oracle,下面是個簡單的示例,你可能需要修改其中連線標示(指`mymachine.mydomain/MYDB`這個)以便連線自己的資料庫,示例用以顯示HR使用者擁有的所有表: <?php $conn = oci_connect(`hr`, `hr_password`, `mymachine.mydomain/MYDB`); $query = `select table_name from user_tables`; $stid = oci_parse($conn, $query); oci_execute($stid, OCI_DEFAULT); while ($row = oci_fetch_array($stid, OCI_ASSOC)) { foreach ($row as $item) { echo $item.” “; } echo “<br>
“; } oci_free_statement($stid); oci_close($conn); ?> 問題: 檢查Apache錯誤日誌檔案,避免可能發生的啟動錯誤。 零時開啟display_error=on選項以顯示指令碼中的問題,這需要在php.ini中加入” display_error=on”。 用SQL*PLUS檢測可能的環境問題等。 結語 安裝Oracle簡潔客戶端以及OCI 8擴充套件十分簡便,各元件安裝和更新也很容易。 未來PHP 5.3將預設包含OCI 8 1.3版擴充套件。


本文轉自maclean_007 51CTO部落格,原文連結:http://blog.51cto.com/maclean/1276844



相關文章