You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter 4 CLI执行Cron Job时SQLSRV数据库连接失败求助

问题分析与解决方案

这个错误的核心原因是CLI环境使用的PHP配置未启用SQLSRV扩展——Web服务器(如IIS/Apache)加载的是一套php.ini,而命令行(CLI)模式下的PHP加载的是另一套配置,两者并非共用同一个文件,导致Web端能正常使用的扩展在CLI环境中未启用。

解决步骤

1. 确认CLI使用的PHP版本

打开命令提示符(CMD),执行:

php -v

对比Web环境的PHP版本(可通过phpinfo()查看),确保两者版本一致。若版本不同,说明你安装了多个PHP,CLI使用的是未配置扩展的那一个。

2. 找到CLI对应的php.ini文件

在CMD中执行:

php --ini

查看输出里的Loaded Configuration File项,这就是CLI模式下PHP加载的配置文件路径。

3. 在CLI的php.ini中启用SQLSRV扩展

打开找到的php.ini文件,进行以下修改:

  • 确认extension_dir配置项指向正确的扩展目录(比如extension_dir = "ext",若为绝对路径则填写完整路径)。
  • 添加或取消注释以下两行:
    extension=sqlsrv
    extension=pdo_sqlsrv
    
    注意:如果你的PHP是非线程安全(NTS)版本,扩展文件名可能带有nts标识(如php_sqlsrv_nts_x64.dll),需确保文件名与php.ini中的配置一致。

4. 验证扩展是否启用

执行以下命令,查看输出列表中是否包含sqlsrv和pdo_sqlsrv:

php -m

5. 测试CLI数据库连接

创建一个简单的测试脚本(如test_sqlsrv.php),内容如下:

<?php
$serverName = "localhost,1433";
$connectionOptions = [
    "Database" => "dbtest",
    "Uid" => "myuser",
    "PWD" => "mypassword"
];

$conn = sqlsrv_connect($serverName, $connectionOptions);
if ($conn === false) {
    die(print_r(sqlsrv_errors(), true));
} else {
    echo "数据库连接成功";
    sqlsrv_close($conn);
}

在CMD中执行:

php test_sqlsrv.php

若输出「数据库连接成功」,说明扩展配置正确。

6. 配置Windows任务计划(代替Cron)

Windows没有原生Cron,需用任务计划程序设置定时任务:

  1. 打开「任务计划程序」,点击「创建基本任务」。
  2. 设置任务名称(如「检查数据库定时任务」),触发器选择「每天」,再设置每15分钟重复一次。
  3. 操作选择「启动程序」,程序或脚本填写PHP的完整路径(如C:\php\php.exe),添加参数填写Spark命令和控制器方法:
    C:\path\to\your\project\spark controller:yourMethod
    
  4. 设置起始于为项目根目录(如C:\path\to\your\project),完成配置。

内容的提问来源于stack exchange,提问作者Marco Marongiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:10:26