配置Apache 2.2+PHP 5.2.9支援OCI通過Oracle9i Client串連Oracle

來源:互聯網
上載者:User

從上周開始,一直被一個問題困擾著,公司電腦上裝的是Oracle9i用戶端,然後使用Apache 2.2+php 5串連oracle資料庫,不管如何配置都不能使用OCI

(使用oracle 10g的用戶端只要去掉php.ini的php_oci8.dll的注釋就會支援oci8,我膝上型電腦上是10g的用戶端一點問題都沒有.但因為一些其他原因不能把oracle9i卸載掉裝10g)

從網上也找了很多資料去研讀,網上有牛人給出了這樣的解釋.

PHP5的oci8不相容oracle的 oci5.1.2以上引起的
php在設計時就是依賴於10,原因是他們認為在工作於8i相容模式和讓使用者下載10的InstantClient兩種取捨之間,選擇了後者
會引起問題。

 

就是說如果要使PHP支援OCI串連Oracle資料庫,就一定要依賴oracle client端版本10以上的函數庫.

另外oracle網站上給出了這樣的解決方案

http://www.oracle.com/technology/global/cn/pub/notes/technote_php_instant.html 中文版本

http://www.oracle.com/technology/pub/notes/technote_php_instant.html 英文版本

  1. 下載 PHP 二進位壓縮檔(不是安裝程式版本)和 Apache。按照 PHP 手冊中的 Windows 系統上的安裝安裝它們。OTN 的開放原始碼開發人員中心包含有用背景資料的連結,如“在 Windows 2000/XP 上安裝 Oracle、PHP 和 Apache”,它介紹了如何安裝傳統、完整的 Oracle 10g 版本(Instant Client 不需要此版本)。

    繼續操作之前檢查 PHP 是否正常運行。此階段未啟用 Oracle 支援。

  2. 從 OTN 的 Instant Client 頁面下載用於 Windows 的 Instant Client Basic 程式包。此壓縮檔的大小大約為 30MB。

  3. 建立一個子目錄(例如,c:\instantclient10_1),然後從壓縮檔中複製以下庫:

    • oraociei10.dll
    • orannzsbb10.dll
    • oci.dll

    這三個檔案的總大小大約為 80MB。

    要使用 PHP 老版本的“oracle”擴充(在 php.ini 中使用“extension=php_oracle.dll”啟用),則複製 ociw32.dll 而非 oci.dll。

  4. 編輯此環境,將 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。

  5. 編輯 php.ini,並不要將 OCI8 擴充設為注釋:

    extension=php_oci8.dll

    將 extension_dir 指令設定為完整的 PHP 擴充 DLL 路徑。在 PHP 4 中,DLL 位於 PHP 軟體的“extensions”子目錄中。在 PHP 5 中,它們位於“ext”中。

  6. 重新啟動 Apache。

要檢查是否配置了擴充,請在 網頁伺服器可以讀取的地方建立一個簡單的 PHP 指令碼。

<?php 
phpinfo();
?>

使用“http://”URL 將此指令碼載入到瀏覽器中。瀏覽器頁面應包含一個顯示“OCI8 Support enabled”的“oci8”部分。

 

也許是小的愚鈍,說實話我完完全全按照上面的步驟進行,還是不成功,環境變數設定好了也不支援.使用phpinfo()仍然沒有oci8的部分出現.

開啟命令提示字元,到php的安裝目錄,輸入php -v驗證.出現

無法定位程式輸入焦點OCIStmtPrepare2於動態連結程式庫OCI.dll上

百思不得其解,明明配置好環境變數了,為什麼仍舊不能定位到OCI.dll上?於是就把步驟3中的3個dll檔copy到php的安裝目錄下,再一次的輸入php -v,不再提示錯誤.

使用php指令碼的phpinfo()驗證還是不支援oci8.嗯,也許還是環境變數配置的問題吧.

於是就再一次的把步驟3中的3個dll檔案copy到了apache的bin目錄下.重啟Apache,使用php指令碼再一次驗證,哇靠,終於出現oci8 support啦~

刪除php安裝目錄下的3個dll檔,.重啟Apache,使用php指令碼再一次驗證,仍然支援oci8 support.

困擾了我一周多的問題解決.回顧一下,總結出配置的步驟如下

前提:Apache 2.2 +php 5.2.9已配置OK

Step 1: Instant Client 頁面下載用於 Windows 的 Instant Client Basic 程式包,解壓縮copy出

  • oraociei10.dll
  • orannzsbb10.dll
  • oci.dll

    這個三個dll 檔案到apache的bin目錄下.

    Step 2:去掉php.ini檔案中php_oci8.dll前的注釋,使PHP增加oci擴充功能.重新啟動apache

    Step 3:編寫php指令碼

    <?php

       phpinfo();

    ?>

    使用“http://”URL 將此指令碼載入到瀏覽器中。瀏覽器頁面應包含一個顯示“OCI8 Support enabled”的“oci8”部分。

    Step 4:雖然開啟了oci8支援,但要使用戶端的NLS_LANG同資料庫中的NLS_LANG相匹配,否則會出現另外一種錯誤ORA-12705: invalid or unknown NLS parameter value specified

  • 用戶端修改NLS_LANG :開啟註冊表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,找到NLS_LANG索引值,原來的值為NA,修改為和伺服器上的一樣即可

  • 設定環境變數的方法,理論上來說是正確的.但不適用於我的機器上,原因不明.在這裡給出這樣一種方法.權當參考.貽笑大方.

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.