Debian 安裝設定 PHP 連 Oracle extension(OCI8)

Debian Linux 安裝 PHP, 然後要用此 PHP 去連 Oracle, 不過預設 Orace connect 是沒有編進 PHP 裡面的, 但是又不想要把 PHP 重新 make, 為了要維護方便, 所以就想辦法來把他編成 Modules, 在 Pecl 找到 oci8, 一切就方便多囉~

Debian 安裝 PHP Pecl oci connection

安裝 OCI8 步驟(安裝 PHP 連 Oracle Version 10.2.0.4 的 OCI 版本)

  1. Oracle Database Instant Client 下載 Client/SDK (Version 10.2.0.4 Instant Client Package - Basic 和 SDK)
  2. apt-get install php-pear php5-dev
  3. mkdir -p /opt/oracle
  4. cd /opt/oracle
  5. unzip ~/oracle-instantclient-basic-10.2.0.4-1.i386.zip # instantclient_10_2
  6. unzip ~/oracle-instantclient-devel-10.2.0.4-1.i386.zip # instantclient_10_2/sdk/
  7. mv instantclient_10_2 instantclient
  8. cd /opt/oracle/instantclient
  9. ln -s libclntsh.so.10.1 libclntsh.so
  10. ln -s libocci.so.10.1 libocci.so
  11. pecl install oci8

    問題: Please provide the path to ORACLE_HOME dir. Use 'instantclient,/path/to/instant/client/lib' if you're compiling against Oracle Instant Client [autodetect] :
    輸入: shared,instantclient,/opt/oracle/instantclient

  12. pecl 裝完後, so 檔會放置於: /usr/lib/php5/20060613+lfs/oci8.so, 此檔案就是 php oci8 extension 囉~
  13. vim /etc/php5/conf.d/oci8.ini # 建立 oci8.ini 檔案(讓 apache 載入時讀取此 extension), 內容如下:

    extension=oci8.so

  14. /etc/init.d/apache2 reload
  15. 這樣子就完成 PHP OCI8 的安裝囉~

測試

vim oci.php

<?php
oci_connect();
?>

php oci.php # 執行

  • Warning: oci_connect() expects at least 2 parameters, 0 given in oci.php on line 2 # 看到這個就代表成功了~
  • Fatal error: Call to undefined function oci_connect() in oci.php- on line 2 # 看到這樣子就是沒裝好或沒設好.

寫個簡單的 Oracle Connect 的 Insert/Select 程式測試:

<?php
$dbh = oci_connect ('ACCOUNT', 'PASSWORD', '//10.0.0.1/DBNAME') or die('OCI Connect error');
$res = oci_parse($dbh, 'INSERT INTO "USERS"(ID, NAME, PASSWORD) VALUES(1, "admin", "admin_password")') or die('Insert error');
//$res = oci_parse($dbh, 'SELECT * FROM "USERS"') or die('Select user error');
oci_execute($res);

while ($row = oci_fetch_assoc($res)) {
    foreach ($row as $item) {
        echo $item . "\n";
    }
}
?>

其它參考

其它附註

Oracle SQL Developer 設定

  • 設定 Role 要選 default, 若選 sysdba, SQL 語法 SELECT Table 前就需要加 db name
  • DB insert 需要用 "單引號" 括起來(Oracle 認定的字串需要用 單引號 選起來), 雙引號是對分辨 Table name 大小寫用的.

關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 My_Note-Unix。將永久鏈結加入書籤。

Debian 安裝設定 PHP 連 Oracle extension(OCI8) 有 8 則回應

  1. joe 說道:

    不好意思,請問一下
    我的環境如下:
    兩台主機都是 Linux 環境
    S1:oracle 8.1.7 Server
    S2:是想連線到 S1 取資料的 Web 主機

    我照大大設定方式,確實在S2主機上安裝起 OCI8模組,可是當要連至遠端時,卻出現如下訊息

    Warning: ociplogon() [function.ociplogon]: ORA-12154: TNS:could not resolve the connect identifier specified in /conn.php 2
    其內容是

    不知還要設定什麼

    謝"

  2. Tsung 說道:

    這是程式沒寫好, 不然就是 Oracle 設定的問題囉~ 🙂
    (先試試看用其他工具連線看看?)

  3. 簡簡單單 說道:

    我想請教一下~
    我跟joe一樣的問題
    我在s2主機已裝好oci8了~
    是不是在s2主機要裝oracle client
    才能連至s1 的oracle啊?
    ^^"
    謝謝~

  4. Tsung 說道:

    不用再裝 oracle client 了, 在上面已經將 php 的 oci (oracle client) 包在裡面了, 所以再連不上的話, 應該是 Oracle 設定問題, 不然就是程式 connect 那段沒寫好囉~ 🙂

  5. 簡簡單單 說道:

    不好意思 我還有問題要請教您
    有寄一封信到您的gmail~
    不知您有沒有空看一下~
    冒昧打擾 不好意思
    如不方便 就沒關係
    謝謝您!!

  6. Tsung 說道:

    已經回信囉~ 如果沒收到再跟我說一聲~ 🙂

  7. Thank you! 說道:

    Dear "Big Big"~

    Thank you very much for your instruction! I found an article it teach me how to configure PHP instant client, it's very similar to what you written but it doesn't work, and your writing works~ I'd tired to fix it, at least you saved me QQ

    Thank you very much!

    (Sorry I haven't installed any Chinese input method on this vm so I wrote this comment in English~)

  8. Tsung 說道:

    呵呵, 很高興能對您有幫助~ 🙂

發表迴響