花了好多時間終於搞定了。用慣 web hosting 或 FreeBSD 萬能 make install 之後,很久沒自己在機器上對付各種設定問題啦。之前被apache2.2+MySQL先整到,接者又被MySQL的校對編碼還有multibyte string encoding等等給推倒,好不容易在windows上搞定apache+php+MySQL(都是wiki的錯,誰叫他推薦我用最新的…淚~~)。最近又要來連個Oracle…還是作個筆記不然下次大概忘光了=w=
解決方法主要是參考Oracle Technology Network的這篇文章,但看文時有時看漏重點白忙很久,以下把重點列出
- 到Oracle網站下載 Instant Client 這是可以免費下載的不用擔心,不過要下載要註冊Oracle會員(同樣無料)。
- 下回來後解壓縮到某個目錄,然後把這個目錄的路徑加入Windows系統的PATH環境變數。注意! 一定要加的比其他Oracle軟體路徑更前面!!!
- 趁重開機讓環境變數生效之前也順便加一下Oracle相關環境變數吧。一定要加的有兩個:TNS_ADMIN 和 NLS_LANG。不想加在系統中也可以寫在php程式的開頭,使用PutEnv(“NLS_LANG=yourNlsLang”); 的語法設定,好處是彈性比較大,連不只一台Oracle,然後各台設定不同的時候可以動態修改。
- TNS_ADMIN 是你的 服務命名組態檔(tnsnames.ora)的路徑。通常有連oracle的需求時,windows上也會裝Client的工具組吧,並且可以使用該應用程式設定連線組態,找到你的連線組態,選另存新檔,這個tnsnames.ora就會被產生出來。
- NLS_LANG是設定連線編碼用的,可參考這份說明文件。要設定成跟你想連線的遠端Oracle機器相同才行。要知道機器的設定,可以開windows上的oracle client下SQL指令:SELECT * from V$NLS_PARAMETERS 可以列出相關參數
- NLS_LANG的格式是 :_.
例如: NLS_LANG=TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5 - 如果曾經在環境變數中設定ORACLE_HOME, ORACLE_SID 請刪除這兩個環境變數。
- php.ini 的設定當然是不可或缺的。請把 extension=php_oci8.dll 打開,存檔後重新啟動apache。
- 如果沒有問題的話,使用 phpinfo(); 應該可以看到多出了oci8的相關設定才是。