Windows 開發環境連接 Oracle 是眾多 PHP 開發者的日常痛點:架構匹配(x64/x86)、環境變量配置、DLL 地獄、擴展啟動順序,環環相扣。本文針對 Win7 64 位系統,提供從 Instant Client 下載到 PHP 擴展啟用的全流程圖文指引,助你一次成功。
instantclient-basic-windows.x64-11.2.0.4.0.zip、instantclient-sdk-windows.x64-11.2.0.4.0.zipD:\Program Files (x86)\Oracle64Client\instantclient_11_2oci.dll、oraociei11.dll、oraons.dll、sdk/include/oci.h;D:\Program Files (x86)\Oracle64Client\instantclient_11_2ORACLE_HOMED:\Program Files (x86)\Oracle64Client\instantclient_11_2TNS_ADMIND:\Program Files (x86)\Oracle64Client\instantclient_11_2\network\adminecho %PATH% 包含上述路徑tnsping 命令可用(若報錯則 Path 未生效)php.ini(確認是 Apache/PHP-FPM 實際加載的那個,參考 phpinfo())extension=oci8,取消註釋或添加:extension=oci8_12c (PHP 7.x 對應 12c 客戶端)extension=oci8 (PHP 5.x 對應 11g 客戶端)ext/ 目錄實際文件extension_dir 指向正確:extension_dir = "D:/php/ext"瀏覽器訪問 phpinfo() 頁面,搜索 oci8,應看到:

"; oci_close($conn); ?>
%TNS_ADMIN% 目錄創建 tnsnames.ora:DEV_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.23.131)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dev)
)
)
oci_connect('test', 'test', 'DEV_DB')| 現象 | 原因 | 解決 |
|---|---|---|
| PHP Warning: Unable to load dynamic library 'oci8' | DLL 架構不匹配 / 依賴缺失 | 確認 PHP/x64、Instant Client/x64、Apache/x64 三統一 |
| ORA-12705: Cannot access NLS data files | NLS_LANG 環境變量缺失 | 新建系統變量 NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK |
| ORA-12154: TNS:could not resolve | TNS_ADMIN 路徑錯或 tnsnames.ora 格式錯 | 用 tnsping 別名測試、檢查括號匹配、編碼為 ANSI |
| Apache 崩潰 / PHP 進程退出 | oci.dll 依賴的 VC++ 運行庫缺失 | 安裝 Visual C++ Redistributable 2010/2012/2013 (x64) |
| oci_connect 返回 false 無錯誤信息 | 錯誤模式未設置 | oci_connect 後立即 oci_error() 捕獲 |