在企業級 PHP 應用開發中,連接 Oracle 數據庫是常見需求。本文記錄在 CentOS 6 系統、PHP 5.3.28 環境下,通過編譯安裝 OCI8 擴展實現 PHP 連接 Oracle 的完整流程,包含 Oracle Instant Client 部署、擴展編譯、配置優化等關鍵步驟。
| 組件 | 版本/說明 |
|---|---|
| 作業系統 | CentOS 6 (64位) |
| PHP 版本 | 5.3.28 |
| Oracle 客戶端 | Instant Client 10.2.0.4 (64位) |
| OCI8 擴展 | 2.0.7 (PECL 官方版本) |
前往 Oracle 官網下載以下四個 RPM 包(64位系統):
批量安裝:
# rpm -ivh *.rpm
安裝完成後,客戶端庫文件默認位於 /usr/lib/oracle/10.2.0.4/client64/lib/。
# 下載源碼包
wget https://pecl.php.net/get/oci8-2.0.7.tgz
# 解壓進入目錄
tar zxvf oci8-2.0.7.tgz
cd oci8-2.0.7
# phpize 準備編譯環境(根據實際 PHP 安裝路徑調整)
/usr/local/php/bin/phpize
# 配置編譯參數
./configure --with-php-config=/usr/local/php/bin/php-config \
--with-oci8=shared,instantclient,/usr/lib/oracle/10.2.0.4/client64/lib/
# 編譯安裝
make && make install
關鍵參數說明:
--with-php-config:指定 php-config 路徑,確保編譯參數與當前 PHP 版本匹配--with-oci8:shared 表示編譯為動態庫,instantclient 指定使用 Instant Client 模式,後接庫文件路徑編輯 PHP 配置文件:
# vi /usr/local/php/etc/php.ini
在 [PHP] 區段或擴展加載區域添加:
extension = "oci8.so"
# 查找主進程 PID
ps aux | grep php | grep root
# 發送平滑重啟信號 (USR2)
kill -USR2
或使用服務管理命令(視安裝方式而定):
# service php-fpm reload
# 或
systemctl reload php-fpm
# 命令行檢查
php -m | grep oci8
# 或創建 phpinfo 頁面查看
php -r "phpinfo();" | grep -i oci8
成功時將顯示 OCI8 模塊信息,包含版本號、Oracle 客戶端版本等詳情。
--with-oci8 路徑正確,且 libclntsh.so 存在echo "/usr/lib/oracle/10.2.0.4/client64/lib" > /etc/ld.so.conf.d/oracle.conf
ldconfig
extension_dir 配置是否正確,或使用絕對路徑 extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-xxx/oci8.sooci_pconnect() 減少連接開銷oci8.statement_cache_size 優化語句解析性能完成上述步驟後,PHP 應用即可通過 OCI8 函數族(oci_connect、oci_parse、oci_execute 等)高效訪問 Oracle 數據庫,滿足企業級數據交互需求。