程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 安裝PHP和Oracle 10g即時客戶端

安裝PHP和Oracle 10g即時客戶端

編輯:Oracle數據庫基礎

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 預構建二進制文件的補充。

  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。

    要檢查是否配置了擴展,請在 web 服務器可以讀取的地方創建一個簡單的 PHP 腳本。

    <?php 
    PHPinfo();
    ?>
    

    使用“http://”URL 將此腳本加載到浏覽器中。浏覽器頁面應包含一個顯示“OCI8 Support enabled”的“oci8”部分。

    在 Linux 上啟用 PHP OCI8 擴展

    要在 Linux 上添加 Oracle 連接,需要重新編譯 PHP。

    開放源代碼開發人員中心包含有用背景資料的鏈接,如在 Linux 上安裝 Oracle、PHP 和 apache,它介紹了如何安裝傳統、完整的 Oracle 10g 版本(Instant ClIEnt 不需要此版本)。

    1. 下載並安裝 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
        
    2. 下載並解壓縮 PHP。

    3. 從 OTN 上的 Instant Client 頁面下載 Basic 和 SDK Instant ClIEnt 程序包。這兩個 RPM 的總大小大約為 30MB。

    4. 以 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)。

    5. 備份此補丁,然後將它應用於 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 解壓縮到與基本程序包相同的目錄中,以便修改後的配置腳本可以找到頭文件的子目錄。

    6. 在頂層 PHP 目錄中重新構建“configure”腳本。
      cd PHP-4.3.9
      rm -rf autom4te.cache config.cache
      ./buildconf --force
        
    7. 使用新選項運行 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
      
    8. 重建 PHP。

      make
      make install
      
    9. 將 PHP 配置復制到 --with-config-file-path 指定的位置

      cp php.ini-recommended $HOME/apache/conf/PHP.ini
      
    10. 將 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 腳本。

      <?php 
      PHPinfo();
      ?>
      

      使用類似“http://localhost:8888/<path>/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 擁有的所有表:

      <?PHP 
      $conn = OCILogon("hr", "hr_passWord", '//myMachine.mydomain:port/MYDB);
      $query = 'select table_name from user_tables';
      $stid = OCIParse($conn, $query);
      OCIExecute($stid, OCI_DEFAULT);
      while ($succ = OCIFetchInto($stid, $row)) {
      foreach ($row as $item) {
      echo $item." ";
          }
      echo "<br>\n";
       }
      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 環境變量。

      結論

      希望本文對您能有所幫助。您可以在 OTN Instant ClIEnt 或 PHP 論壇上發表問題和建議。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved