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 那邊開得連線數不夠造成的.
    這個只要量大的都很容易遇到, 不過, 狀況太多種, 得要看各種環境而定.

發表迴響

This site uses Akismet to reduce spam. Learn how your comment data is processed.