Symfony 3+Behat 3直写Oracle SQL遇OCI_COMMIT_ON_SUCCESS未定义错误求助
解决Behat Context中OCI_COMMIT_ON_SUCCESS未定义的错误
你遇到的问题核心其实是Behat运行的PHP环境没加载OCI8扩展——虽然你的Symfony控制器和常规CLI命令行能正常用OCI扩展,但Behat大概率在另一个PHP配置上下文里跑。下面是具体的排查和解决步骤:
1. 先确认Behat的PHP环境是否真的加载了OCI8
在你的UserSetupContext.php里临时加一段调试代码,比如随便找个步骤方法插入:
/** * @Given 我要检查Oracle扩展状态 */ public function iCheckOracleExtensionStatus() { // 直接打印OCI扩展是否加载 var_dump(extension_loaded('oci8')); // 列出所有已加载的扩展,方便排查 print_r(get_loaded_extensions()); // 查看当前PHP用的配置文件路径 phpinfo(); exit; }
然后运行对应的Behat场景,看输出:
- 如果
extension_loaded('oci8')输出bool(false),实锤Behat的PHP环境没加载扩展 - 找到
Loaded Configuration File这一行,对比你平时修改的php.ini路径,大概率不是同一个文件
2. 修正Behat对应的PHP配置
如果发现Behat用的是另一个php.ini:
- 打开这个配置文件,找到
extension=oci8(或者对应版本的extension=oci8_12c),去掉前面的注释符号; - 保存后重新运行Behat场景,验证扩展是否加载成功
3. 检查Behat调用的PHP可执行文件
有时候系统里装了多个PHP版本,Behat调用的不是你配置过的那个:
- 在终端跑
which php,得到当前默认PHP路径 - 再跑
php -m | grep oci8,看能不能找到oci8扩展 - 如果找不到,要么修改这个PHP对应的php.ini,要么强制指定Behat用正确的PHP路径运行:
/path/to/your/correct/php/bin/php vendor/bin/behat
4. 特殊情况:Behat Phar包或自定义启动脚本
如果你用的是Behat的Phar包,或者有自定义启动脚本,要确认这些脚本有没有用-c参数指定其他php.ini,有的话改成正确的配置文件路径就行。
内容的提问来源于stack exchange,提问作者CasualBen
相关产品推荐
相关产品推荐

