Debian 安裝設定 PHP 連 Oracle extension 使用 PDO(PDO_OCI)

PHP 連 Oracle 使用 PDO_OCI, 目前看起來似乎不太建議使用, 不過程式都寫完了, 還是先設起來用囉~

不過要於 Debian Linux 安裝 PDO_OCI 有點問題

  • Debian 預設已把 PDO 編進 PHP 裡面, 所以再裝 PDO 會造成 PHP 執行就 core dump.
  • 不裝 PDO, PDO_OCI 又說版本不對, 說 PDO 版本要大於 1.0 版 等(明明就是 > 1.0 版的, 一樣也會有此錯誤).
  • 錯誤訊息一堆, 都無法編起來, 找到一堆人發出來安裝不起來的 Bug, 但是都沒有解法.

大概遇到的錯誤訊息有以下列表: (其它錯誤訊息沒記, 只記最有印象的)

  • error: Cannot find php_pdo_driver.h
  • You need to tell me where to find your oracle SDK, or set ORACLE_HOME.
  • /tmp/PDO_OCI-1.0/php_pdo_oci_int.h:21:17: error: oci.h: No such file or directory

所以最後的辦法, 就去看錯誤訊息的 script, 去看漏的 檔案 / Library 有哪些, 就把那些檔案都補齊, 需要設定某些參數, 就把參數補齊, 所以下面會看到的 ln, 或其它動作 等, 都是在做補齊的動作.

PHP install PDO_OCI 安裝步驟(Step by step)

  1. Oracle Database Instant Client 下載 Client/SDK (Version 10.2.0.4 Instant Client Package - Basic, Instant Client Package - SDK)
  2. mkdir -p /opt/oracle
  3. cd /opt/oracle
  4. unzip ~/oracle-instantclient-basic-10.2.0.4-1.i386.zip # instantclient_10_2
  5. unzip ~/oracle-instantclient-devel-10.2.0.4-1.i386.zip # instantclient_10_2/sdk/
  6. mv instantclient_10_2 instantclient
  7. cd /opt/oracle/instantclient
  8. ln -s libclntsh.so.10.1 libclntsh.so
  9. ln -s libocci.so.10.1 libocci.so
  10. ln -s /opt/oracle/instantclient/ /opt/oracle/instantclient/lib # ./configure 檢查是要看 lib
  11. export ORACLE_HOME=/opt/oracle/instantclient/
  12. apt-get install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 # 這主要只是裝裝 apache, 順便試試 mysql, 這行可略過.
  13. apt-get install php-pear php5-dev dh-make-php make re2c # pecl 編譯時要用

下述開始編譯 Pecl PDO_OCI:

  1. mkdir tmp
  2. cd tmp
  3. pecl download pdo # pdo_oci 要安裝, 需要 pdo library
  4. pecl download pdo_oci
  5. tar zxvf PDO-1.0.3.tgz
  6. tar zxvf PDO_OCI-1.0.tgz
  7. mkdir -p PDO_OCI-1.0/include/php/ext/pdo/
  8. mv PDO-1.0.3/* PDO_OCI-1.0/include/php/ext/pdo/  # 出現 error: Cannot find php_pdo_driver.h, 所以幫他補齊
  9. cd PDO_OCI-1.0/
  10. phpize
  11. ./configure
  12. vim Makefile
    • 於 INCLUDES 加入 -I/opt/oracle/instantclient/sdk/include # 不然會出現 /tmp/PDO_OCI-1.0/php_pdo_oci_int.h:21:17: error: oci.h: No such file or directory
    • 加入完那行會變成: INCLUDES = -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -I/opt/oracle/instantclient/sdk/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
  13. make
  14. make install #會安裝到  /usr/lib/php5/20060613+lfs/pdo_oci.so
  15. vim /etc/php5/conf.d/pdo_oci.ini # 建立 pdo_oci.ini, 內容如下:

    extension=pdo_oci.so

其它參考

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈Debian 安裝設定 PHP 連 Oracle extension 使用 PDO(PDO_OCI)〉中有 2 則留言

  1. 我們公司原本是用php adodb來跟oracle連線,但實際上跑起來效能很差 ,所以改用sql-relay來當第三方連線;
    請問您是否有遇到DBA 說oracle 連線數限制的問題呢?
    環境是centos + php4

  2. 效能差是因為 跟 oracle 的連線, 要建立連線這個時間比較久, 用 sql-relay 可以將連線一直保持著, 就可以解決這個問題.
    但是遇到連線數限制, 這個問題比較常見是連線完沒有 close.
    或者是 web server 那邊, 連線數開太多, 但是 oracle 那邊開得連線數不夠造成的.
    這個只要量大的都很容易遇到, 不過, 狀況太多種, 得要看各種環境而定.

Tsung 發表迴響取消回覆

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料