安装yajra/laravel-oci8 v6.0.0遇阻:OCI8扩展加载失败求助
问题描述
在VSCode中执行composer install时出现以下报错:
PHP Warning: PHP Startup: Unable to load dynamic library 'oci8_12c' (tried: C:\xampp\php\ext\oci8_12c (Não foi possível encontrar o módulo especificado.), C:\xampp\php\ext\php_oci8_12c.dll (Não foi possível encontrar o módulo especificado.)) in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'oci8_12c' (tried: C:\xampp\php\ext\oci8_12c (Não foi possível encontrar o módulo especificado.), C:\xampp\php\ext\php_oci8_12c.dll (Não foi possível encontrar o módulo especificado.)) in Unknown on line 0
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.Problem 1
- Installation request for yajra/laravel-oci8 v6.0.0 -> satisfiable by yajra/laravel-oci8[v6.0.0].
- yajra/laravel-oci8 v6.0.0 requires ext-oci8 >=2.0.0 -> the requested PHP extension oci8 is missing from your system.To enable extensions, verify that they are enabled in your .ini files:
- C:\xampp\php\php.ini
You can also runphp --iniinside terminal to see which files are used by PHP in CLI mode.
当前环境:XAMPP 7.4.29、COMPOSER 1.10.5、ORACLE INSTANT CLIENT 12.2,已尝试放置oci8_12c文件但问题依旧。
解决方案
1. 确认oci8扩展文件匹配度
- 下载与PHP版本(7.4.x)、系统架构(32/64位)完全匹配的
php_oci8_12c.dll文件:- 若XAMPP为32位,必须用32位扩展;64位则对应64位,版本/架构不匹配会导致加载失败。
- 将文件放入
C:\xampp\php\ext目录,确保文件名与报错中的php_oci8_12c.dll完全一致。
2. 修正PHP.ini配置
- 打开
C:\xampp\php\php.ini,找到扩展配置区域:- 添加或取消注释
extension=oci8_12c(无需加.dll后缀)。 - 确认
extension_dir配置正确,指向ext目录:extension_dir = "ext"
- 添加或取消注释
3. 配置Oracle Instant Client环境变量
- 将Oracle Instant Client根目录(如
C:\instantclient_12_2)添加到系统PATH环境变量,优先级高于XAMPP的PHP目录,避免加载错误的库文件。 - 添加系统环境变量
ORACLE_HOME,值为Oracle Instant Client的根目录。 - 配置完成后,重启VSCode和所有终端窗口,确保环境变量生效。
4. 验证PHP CLI的扩展加载情况
- 在终端执行
php --ini,确认加载的是C:\xampp\php\php.ini文件。 - 执行
php -m,查看输出中是否包含oci8,存在则说明扩展加载成功。 - 若仍有报错,执行
php -v查看具体错误信息,针对性调整配置。
5. 重新执行Composer命令
完成上述配置后,在终端重新运行:
composer install
内容的提问来源于stack exchange,提问作者Sergio Rodrigo

