為Linux和Windows安裝PHP和Oracle10g(轉)

BSDLite發表於2007-08-12
為Linux和Windows安裝PHP和Oracle10g(轉)[@more@]Oracle 10g Instant Client(免費下載)是PHP 與遠端 Oracle 資料庫連線的最簡單方式,它只需要安裝三個庫。 PHP 訪問 Oracle 的當前 API 所使用的 Instant Client 庫稱作 OCI8.(此 C 介面的名稱最早是在 Oracle8 中引入的。)PHP Oracle 8 函式 可以直接呼叫 Oracle 8.1.7、9.x 或 10.x,或者也可以為了方便起見,使用可選的抽象類,如 PEAR MDB2 和 ADOdb。 Instant Client 也可以使用老版本的 PHP“oracle”擴充套件,但它呼叫不贊成使用的 Oracle API。PHP 界或 Oracle 建議不要使用此擴充套件進行新的開發。 要在 Apache 上將 Instant Client 與 PHP 4 或 連用,請遵循以下步驟。需要一個現有的 Oracle 資料庫;Instant Client 不提供 Oracle 資料庫。通常情況下,此資料庫將位於其他計算機上。如果資料庫位於本地,則 Oracle 元件一般早已可用,從而不需要 Instant Client。 軟體需求: 軟體 附註 Oracle Instant Client 下載“Instant Client Package - Basic”。在 Linux 上,還應下載“Instant Client Package - SDK”。 Apache HTTPD Server PHP 界仍推薦 Apache 1.3 PHP — PHP 超文字處理器 4.3 版或更高版本 在 Windows 上啟用 PHP OCI8 擴充套件 Instant Client 二進位制檔案是 PHP 的 Windows 預構建二進位制檔案的補充。 下載 PHP 二進位制壓縮檔案(不是安裝程式版本)和 Apache。按照 PHP 手冊中的 Windows 系統上的安裝安裝它們。OTN 的開放原始碼開發人員中心包含有用背景資料的連結,如“在 Windows 2000/XP 上安裝 Oracle、PHP 和 Apache”,它介紹瞭如何安裝傳統、完整的 Oracle 10g 版本(Instant Client 不需要此版本)。 繼續操作之前檢查 PHP 是否正常執行。此階段未啟用 Oracle 支援。 從 OTN 的 Instant Client 頁面下載用於 Windows 的 Instant Client Basic 程式包。此壓縮檔案的大小大約為 30MB。 建立一個子目錄(例如,c:instantclient10_1),然後從壓縮檔案中複製以下庫: oraociei10.dll orannzsbb10.dll oci.dll 這三個檔案的總大小大約為 80MB。 要使用 PHP 老版本的“oracle”擴充套件(在 php.ini 中使用“extension=php_oracle.dll”啟用),則複製 ociw32.dll 而非 oci.dll。 編輯此環境,將 c:instantclient10_1 新增到 PATH 中(位於其他 Oracle 目錄之前)。 例如,在 Windows 2000 上,依次單擊“開始”->“設定”->“控制皮膚”->“系統”->“高階”->“環境變數”,編輯系統變數列表中的 PATH。 如果使用了 tnsnames.ora 檔案定義 Oracle Net 服務名稱,則將 tnsnames.ora 複製到 c:instantclient10_1,並將使用者環境變數 TNS_ADMIN 設定為 c:instantclient10_1。也可以在使用者環境變數 LOCAL 中定義預設的服務名稱。 設定必要的 Oracle 全球化語言環境變數,如 NLS_LANG。如果沒有設定,則使用預設的本地環境。有關更多詳細資訊,請參見 Oracle PHP 應用程式全球化概述。 無需設定不必要的 Oracle 變數,如 ORACLE_HOME 和 ORACLE_SID。 編輯 php.ini,並不要將 OCI8 擴充套件設為註釋: extension=php_oci8.dll 將 extension_dir 指令設定為完整的 PHP 擴充套件 DLL 路徑。在 PHP 4 中,DLL 位於 PHP 軟體的“extensions”子目錄中。在 PHP 5 中,它們位於“ext”中。 重新啟動 Apache。 要檢查是否配置了擴充套件,請在 web 伺服器可以讀取的地方建立一個簡單的 PHP 指令碼。 使用“http://”URL 將此指令碼載入到瀏覽器中。瀏覽器頁面應包含一個顯示“OCI8 Support enabled”的“oci8”部分。 在 Linux 上啟用 PHP OCI8 擴充套件 要在 Linux 上新增 Oracle 連線,需要重新編譯 PHP。 開放原始碼開發人員中心包含有用背景資料的連結,如在 Linux 上安裝 Oracle、PHP 和 Apache,它介紹瞭如何安裝傳統、完整的 Oracle 10g 版本(Instant Client 不需要此版本)。 下載並安裝 Apache。例如,在您的主目錄中安裝它: cd apache_1.3.31 ./configure --enable-module=so --prefix=$HOME/apache --with-port=8888 make make install 編輯 $HOME/apache/conf/httpd.conf 並新增: AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps 下載並解壓縮 PHP。 從 OTN 上的 Instant Client 頁面下載 Basic 和 SDK Instant Client 程式包。這兩個 RPM 的總大小大約為 30MB。 以 root 使用者的身份安裝 RPM。 rpm -Uvh oracle-instantclient-basic-10.1.0.3-1.i386.rpm rpm -Uvh oracle-instantclient-devel-10.1.0.3-1.i386.rpm 第一個 RPM 將 Oracle 庫置於 /usr/lib/oracle/10.1.0.3/client/lib 中,第二個 RPM 在 /usr/include/oracle/10.1.0.3/client 中建立頭 (header)。 備份此補丁,然後將它應用於 PHP 的 ext/oci8/config.m4。該補丁的行號是基於 PHP 4.3.9 的。如果已修復了 PHP 錯誤 31084(很有可能已在 PHP 4.3.11 和 5.0.4 中修復),則不需要此補丁。 如果使用的是 PHP 4.3.9 或 4.3.10,則可以將此補丁儲存到一個檔案中(如 php_oci8ic_buildpatch),然後使用以下命令安裝它: patch -u config.m4 php_oci8ic_buildpatch 此補丁建立一個新的 PHP 配置引數:--with-oci8-instant-client[=DIR].在 Linux 上,預設情況下,它使用從 RPM 中安裝的最新版本的 Instant Client。可以指定 Oracle 庫所在的目錄來使用其他版本。無論在哪種情況下,都將自動使用正確的 SDK 頭。 新引數與現有的 --with-oci8 引數互斥。 例如:在非 Linux 平臺上,將 Instant Client 程式包解壓縮到您所選擇的目錄中。--with-oci8-instant-client 引數將需要明確指定此目錄;例如,--with-oci8-instant-client=/home/instantclient10_1。應將 Instant Client SDK 解壓縮到與基本程式包相同的目錄中,以便修改後的配置指令碼可以找到標頭檔案的子目錄。 在頂層 PHP 目錄中重新構建“configure”指令碼。 cd php-4.3.9 rm -rf autom4te.cache config.cache ./buildconf --force 使用新選項執行 configure。此示例使用安裝在主目錄中的 Apache。 ./configure --with-oci8-instant-client --prefix=$HOME/php --with-apxs=$HOME/apache/bin/apxs --enable-sigchild --with-config-file-path=$HOME/apache/conf 重建 PHP。 make make install 將 PHP 配置複製到 --with-config-file-path 指定的位置 cp php.ini-recommended $HOME/apache/conf/php.ini 將 LD_LIBRARY_PATH 設定為 /usr/lib/oracle/10.1.0.3/client/lib 並重新啟動 Apache。 如果使用了 tnsnames.ora 檔案定義 Oracle Net 服務名稱,則將 TNS_ADMIN 設定為包含此檔案的目錄。 啟動 Apache 之前應設定所有 Oracle 環境變數。以下指令碼可以幫助完成此操作: #!/bin/sh APACHEHOME=/home/apache LD_LIBRARY_PATH=/usr/lib/oracle/10.1.0.3/client/lib:${LD_LIBRARY_PATH} TNS_ADMIN=/home export LD_LIBRARY_PATH TNS_ADMIN echo Starting Apache $APACHEHOME/apachectl start 要確認是否配置了擴充套件,請在 web 伺服器可以讀取的地方建立一個簡單的 PHP 指令碼。 使用類似“/phpinfo.php”的 URL 將此指令碼載入到瀏覽器中。瀏覽器頁面應包含一個顯示“OCI8 Support enabled”的“oci8”部分。 連線到 Oracle Oracle 連線資訊被傳遞給 OCILogon() 來建立連線。與 Instant Client 關聯的工具通常“遠離”任何資料庫伺服器,因此必須將 Oracle Net 連線識別符號與使用者名稱和口令一起使用。對於已建立的 Oracle 資料庫,連線資訊有可能是眾所周知的。對於新系統,此資訊由 Oracle 安裝程式在安裝資料庫時提供。此安裝程式應配置了 Oracle Net 和建立了一個服務名稱。 在新資料庫中,可能需要將演示模式(如 HR 使用者)解除鎖定並向其提供口令。也可透過在 SQL*Plus 中以 SYSTEM 使用者身份連線並執行以下語句來完成此操作: ALTER USER 使用者名稱 IDENTIFIED BY 新口令 ACCOUNT UNLOCK; 將連線資訊傳遞給 PHP 有多種方法。第一個示例使用 Oracle 10g的 Easy Connect 語法連線到 在 mymachine 上執行的 MYDB 資料庫服務中的 HR 模式。不需要 tnsnames.ora 或其他 Oracle Network 檔案: $c = OCILogon('hr', 'hr_password', '//mymachine.mydomain/MYDB'); 有關 Easy Connect 的語法,請參見 Oracle 的使用 Easy Connect 命名方法文件。 或者,如果 /home/tnsnames.ora 包含: MYDB = (DESCRIPTION= (ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.mydomain)(PORT = 1521)) (CONNECT_DATA= (SERVER = DEDICATED) (SERVICE_NAME = MYDB) ) ) 且 TNS_ADMIN 環境變數設定為 /home(在啟動 Apache 之前),則連線字串可以為: $c = OCILogon('hr', 'hr_password', 'MYDB'); 如果環境變數 LOCAL(在 Windows 上)或 TWO_TASK (在 Linux 上)設定為 MYDB,則可以使用以下程式碼生成與 MYDB 連線: $c = OCILogon('hr', 'hr_password'); 使用 Oracle 當基本連線可以使用時,試著執行一個簡單的指令碼 testoci.php。根據您的資料庫修改該連線的詳細資訊並在瀏覽器中載入它。此示例列出了使用者 HR 擁有的所有表: "; } OCILogoff($conn); ?> 故障診斷 Oracle PHP 故障診斷常見問題解答包含有關連線 Oracle 的有用資訊。 可以從 Instant Client 頁面下載 Oracle 的 SQL*Plus 命令列工具來幫助解決環境問題和連線問題。另請參見 SQL*Plus Instant Client 版本說明。 檢查 SQL*Plus 使用的環境是否與 phpinfo.php 顯示的環境相同。 Windows 幫助 如果 phpinfo.php 指令碼沒有生成顯示“OCI8 Support enabled”的“oci8”部分,則確認在 php.ini 中沒有將“extension=php_oci8.dll”設為註釋。 如果 PATH 設定錯誤,或找不到 Oracle 庫,則啟動 Apache 將顯示警告:“在指定的路徑中找不到動態連結庫 OCI.dll。”phpinfo() 頁面的 Environment 部分將顯示 PATH 的值以及 PHP 實際使用的 Oracle 變數。 如果 php.ini 的 extension_dir 指令不正確,則在啟動 Apache 將顯示警告:“PHP 啟動:無法載入動態庫 php_oci8.dll。” Linux 幫助 仔細檢查是否正確修復了 config.m4。如果“configure”失敗,則檢查 config.log 檔案。還原 config.m4,刪除快取檔案,執行 ./buildconf --force and configure,驗證問題是否與所做的更改相關。 確保“configure”上的時間戳是當前的。刪除所有快取檔案,並在必要時重建它。 在啟動 Apache 的 shell 中設定所有必要的 Oracle 環境變數。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-949499/,如需轉載,請註明出處,否則將追究法律責任。

相關文章