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 版本)
- 於 Oracle Database Instant Client 下載 Client/SDK (Version 10.2.0.4 Instant Client Package - Basic 和 SDK)
- apt-get install php-pear php5-dev
- mkdir -p /opt/oracle
- cd /opt/oracle
- unzip ~/oracle-instantclient-basic-10.2.0.4-1.i386.zip # instantclient_10_2
- unzip ~/oracle-instantclient-devel-10.2.0.4-1.i386.zip # instantclient_10_2/sdk/
- mv instantclient_10_2 instantclient
- cd /opt/oracle/instantclient
- ln -s libclntsh.so.10.1 libclntsh.so
- ln -s libocci.so.10.1 libocci.so
- 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 - pecl 裝完後, so 檔會放置於: /usr/lib/php5/20060613+lfs/oci8.so, 此檔案就是 php oci8 extension 囉~
- vim /etc/php5/conf.d/oci8.ini # 建立 oci8.ini 檔案(讓 apache 載入時讀取此 extension), 內容如下:
extension=oci8.so
- /etc/init.d/apache2 reload
- 這樣子就完成 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";
}
}
?>
其它參考
- Howto: Install Oracle Instant Client and PHP5 OCI8 module on Debian Sarge
- Howto: Install Oracle Instant Client and PHP OCI8 module
- Install OCI8 and MSSQL extensions for PHP5 on Debian 4.0 Etch
- Oracle SQL Developer # 推薦 Windows 可以使用此軟體來連 Oracle
其它附註
Oracle SQL Developer 設定
- 設定 Role 要選 default, 若選 sysdba, SQL 語法 SELECT Table 前就需要加 db name
- DB insert 需要用 "單引號" 括起來(Oracle 認定的字串需要用 單引號 選起來), 雙引號是對分辨 Table name 大小寫用的.
不好意思,請問一下
我的環境如下:
兩台主機都是 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
其內容是
不知還要設定什麼
謝"
這是程式沒寫好, 不然就是 Oracle 設定的問題囉~ 🙂
(先試試看用其他工具連線看看?)
我想請教一下~
我跟joe一樣的問題
我在s2主機已裝好oci8了~
是不是在s2主機要裝oracle client
才能連至s1 的oracle啊?
^^"
謝謝~
不用再裝 oracle client 了, 在上面已經將 php 的 oci (oracle client) 包在裡面了, 所以再連不上的話, 應該是 Oracle 設定問題, 不然就是程式 connect 那段沒寫好囉~ 🙂
不好意思 我還有問題要請教您
有寄一封信到您的gmail~
不知您有沒有空看一下~
冒昧打擾 不好意思
如不方便 就沒關係
謝謝您!!
已經回信囉~ 如果沒收到再跟我說一聲~ 🙂
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~)
呵呵, 很高興能對您有幫助~ 🙂