部署到生产服务器后出现Class 'CodeIgniter\Database\MYSQLI\Connection'未找到错误
问题详情
本地运行正常,部署到生产服务器后出现以下错误:
CRITICAL - 2022-11-20 19:29:19 --> Class 'CodeIgniter\Database\MYSQLI\Connection' not found
in SYSTEMPATH/Database/Database.php on line 136.
1 SYSTEMPATH/Database/Database.php(56): CodeIgniter\Database\Database->initDriver('MYSQLI', 'CodeIgniter\\Database\\MYSQLI\\Connection', [...])
2 SYSTEMPATH/Database/Config.php(78): CodeIgniter\Database\Database->load([...], 'default')
3 SYSTEMPATH/Model.php(137): CodeIgniter\Database\Config::connect('default')
4 SYSTEMPATH/Config/Factories.php(126): CodeIgniter\Model->__construct(null)
5 SYSTEMPATH/Config/Factories.php(83): CodeIgniter\Config\Factories::__callStatic('models', [...])
6 SYSTEMPATH/Common.php(817): CodeIgniter\Config\Factories::models('App\\Models\\UsersModel', [...], null)
7 APPPATH/Controllers/Auth.php(99): model('App\\Models\\UsersModel')
8 SYSTEMPATH/CodeIgniter.php(902): App\Controllers\Auth->createNewUser()
9 SYSTEMPATH/CodeIgniter.php(457): CodeIgniter\CodeIgniter->runController(Object(App\Controllers\Auth))
10 SYSTEMPATH/CodeIgniter.php(340): CodeIgniter\CodeIgniter->handleRequest(null, Object(Config\Cache), false)
.env配置
database.default.hostname = 'hostname.net' database.default.database = 'database' database.default.username = 'username' database.default.password = 'password' database.default.DBDriver = MYSQLI database.default.port = 3306
服务器文件结构
- root - codeigniter_framework - app - system - writable - .env - public_html - assets - index.php - .htaccess
已完成操作
- 确认
system/Database/MYSQLI目录下存在Connection.php文件 - 更新public_html/index.php,添加代码:
require FCPATH . '../codeigniter_framework/app/Config/Paths.php'; - 反复核对数据库凭据无误
- 当前处于开发环境
1. 检查文件/目录大小写(重点)
生产服务器多为Linux系统,严格区分文件名大小写,而本地Windows/macOS默认不区分。CodeIgniter的命名空间是CodeIgniter\Database\MYSQLI,对应服务器上的目录必须是全大写的MYSQLI,不能是小写的mysqli。
登录服务器确认system/Database/下的目录名是否为MYSQLI,如果是小写需立即重命名。
2. 修正Paths配置路径
仅在index.php引入Paths.php不够,需确保Paths类的路径配置准确。打开codeigniter_framework/app/Config/Paths.php,检查核心目录的路径设置:
public $systemDirectory = __DIR__ . '/../../system'; public $appDirectory = __DIR__ . '/../'; public $writableDirectory = __DIR__ . '/../../writable';
相对路径可能因index.php在public_html下出现偏差,建议直接使用服务器绝对路径:
public $systemDirectory = '/root/codeigniter_framework/system'; public $appDirectory = '/root/codeigniter_framework/app'; public $writableDirectory = '/root/codeigniter_framework/writable';
3. 验证PHP mysqli扩展是否安装
生产服务器可能未启用mysqli扩展。创建一个phpinfo.php文件放在public_html下:
<?php phpinfo(); ?>
访问该文件,搜索mysqli关键字,确认扩展已安装并启用。若未安装,联系服务器管理员完成安装或启用配置。
4. 清除缓存文件
CodeIgniter开发环境会缓存类映射,部署后需清理缓存:
- 删除
writable/cache/下的所有文件 - 删除
writable/session/下的所有文件 - 若服务器开启OPcache,重启PHP服务或清除OPcache缓存
5. 检查自动加载配置
打开app/Config/Autoload.php,确认PSR-4配置中包含CodeIgniter核心命名空间:
public $psr4 = [ APP_NAMESPACE => APPPATH, 'CodeIgniter' => SYSTEMPATH, ];
确保'CodeIgniter' => SYSTEMPATH这一行存在且路径正确。
内容的提问来源于stack exchange,提问作者Wouter Bosch

