Windows系统PHP8.4安装oci8扩展的方法

在 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重新安装一下。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注