在 Windows 系统上为 PHP 8.4 安装 Oracle 扩展(主要是 OCI8,因为它功能最完整、社区支持最好,适合生产环境连接 Oracle 数据库,包括 11g),过程比 Linux 简单得多:不需要编译,直接下载预编译好的 DLL 文件 + 配置PATH环境变量 + 修改 php.ini 即可。
注意,PDO_OCI 扩展在 Windows 上也支持,但功能较弱(不支持某些高级绑定、LOB 流式等),生产环境强烈推荐 OCI8扩展。以下以 OCI8 扩展为例。
下载 Oracle Instant Client(必须)
Instant Client 是 Oracle 的免费客户端库,OCI8 DLL 需要它才能运行。
1 下载Instant Client
访问 Oracle 官网下载页https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html,选择 最新版本(推荐 23.x 或 21.x/19.x,兼容 Oracle 11g)。
下载 Basic 或 Basic Light ZIP 包(例如instantclient-basic-windows.x64-23.26.1.0.0.zip)。
可选下载 SDK 包,如果需要编译其他东西,但预编译 DLL 不需要下载 SDK 包。
2 解压到目录
例如
C:\oracle\instantclient_23_0
注意,路径不要有空格、中文,推荐放在 C 盘根目录或 Programs 下。
3 添加环境变量(非常重要,否则运行时找不到库)
右键“此电脑” → 属性 → 高级系统设置 → 环境变量。在“系统变量”中找到 Path(或新建),点击编辑 → 新建 → 添加:
C:\oracle\instantclient_23_0
点击确定保存。
重启电脑 或重启命令提示符/PowerShell,让 PATH 生效。
4 安装 Visual C++ Redistributable
下载最新版 Microsoft Visual C++ Redistributable(x64):
https://aka.ms/vs/17/release/vc_redist.x64.exe
安装后重启电脑。
下载预编译的 OCI8 DLL
Windows 上不推荐用 pecl install oci8(因为 Windows 没有编译环境),直接用 PECL 官网提供的 DLL。
1 访问 PECL OCI8 页面
https://pecl.php.net/package/oci8
点击最新稳定版(如 3.4.1 或更高,2025-2026 年最新版支持 PHP 8.3/8.4)。
2 在页面向下滚动,找到 DLL 的下载链接
选择 PHP 8.4 TS(Thread Safe,如果你的 PHP 是 Thread Safe 版)或 NTS(Non-Thread Safe)。
如何判断你的 PHP 是 TS 还是 NTS?参见Windows系统Thread Safe版本和Non Thread Safe版本的PHP的区别。
下载对应的 ZIP(如php_oci8-3.4.1-8.4-ts-vs17-x64.zip,注意如果你的PHP是x86版本的,那么应该下载php_oci8-3.4.1-8.4-ts-vs17-x86.zip)。
3 复制oci DLL文件到PHP扩展目录
解压 ZIP 文件,得到 php_oci8.dll(或 php_oci8_12c.dll、php_oci8_19c.dll 等,根据 Instant Client 版本命名)。
复制这个 DLL 到你的 PHP 扩展目录,例如C:\php\ext\(即你的 PHP 安装路径下的 ext 文件夹)。
配置 php.ini
找到 php.ini 文件(通常在 PHP 安装目录,如 C:\php\php.ini)。 用记事本或 VS Code 打开,找到 [ExtensionList] 或搜索 “extension=”。根据你下载的 DLL 名添加一行:
extension=php_oci8_19
保存 php.ini。
重启 Web 服务器:
- IIS:重启 IIS(iisreset)。
- Apache/XAMPP/WAMP:重启服务。
- 关闭所有命令提示符窗口,重新打开。
验证oci扩展是否安装成功
1 打开一个CMD窗口,运行:
php -m | findstr oci8
应该输出 oci8(无警告)。
2 创建php测试脚本 test_oci.php:
<?php
$conn = oci_connect('system', '你的密码', '127.0.0.1:1521/orcl'); // 替换为你的连接字符串,如 SID 或服务名
if (!$conn) {
$e = oci_error();
echo "连接失败: " . $e['message'];
} else {
echo "OCI8 连接成功!\n";
oci_close($conn);
}
打开一个CMD窗口,运行:
php test_oci.php
或通过浏览器访问(如果用 Web 服务器)。
常见问题及解决方法
1 无法加载 php_oci8.dll(The specified module could not be found)
解决方法是,确认 Instant Client 的 Path 已添加到系统环境变量,且重启电脑。
2 DLL 版本与PHP版本必须匹配
解决方法是,Instant Client 19c+ 用 php_oci8_19c.dll 或 php_oci8.dll。
3 DLL 加载失败缺少 VC++ Redist
解决方法是,重新安装 Visual C++ Redistributable x64。
4 Warning: PHP Startup: Unable to load dynamic library ‘php_oci8_19’ (tried: ext\php_oci8_19 (%1 不是有效的 Win32 应用程序。), ext\php_php_oci8_19.dll (找不到指定的模块。)) in Unknown on line 0
这个错误的原因是,dll位数(x86或x64)与PHP的位数(x86或x64)不匹配。根据“不是有效的 Win32 应用程序”这个报错信息,解决方法是,下载x64版本的dll重新安装一下。