本地MAMP运行CodeIgniter3项目报错,PHP8.0.3环境下求解决方案
问题:CodeIgniter 3 在PHP 8.0.3(MAMP)环境下运行报错
本地MAMP服务器(PHP版本8.0.3)运行CodeIgniter3项目时出现报错,该项目原本可在Windows服务器正常运行,怀疑是CodeIgniter3与PHP8.0.3不兼容导致。
数据库配置代码
$db['default']['hostname'] = 'localhost:8888'; $db['default']['username'] = 'root'; $db['default']['password'] = 'root'; $db['default']['database'] = 'mansions_new_live'; $db['default']['dbdriver'] = 'mysqli'; $db['dbprefix'] = ''; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = TRUE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ''; $db['default']['char_set'] = 'utf8'; $db['default']['dbcollat'] = 'utf8_general_ci'; $db['default']['swap_pre'] = ''; $db['default']['autoinit'] = TRUE; $db['default']['stricton'] = FALSE;
报错截图
- 基础报错:

- 使用mysqli驱动时的报错:

解决方法
CodeIgniter 3.x原生对PHP 8.0+的兼容性有限,按以下步骤逐一排查修复:
修正数据库连接配置
- 端口错误:MAMP默认MySQL端口是
8889,你配置的8888是Apache的端口,将hostname改为localhost:8889,或者直接写localhost(如果MAMP使用socket连接)。 - 关闭持久连接:PHP 8.0已废弃旧的持久连接实现,将
$db['default']['pconnect'] = TRUE;改为FALSE。
- 端口错误:MAMP默认MySQL端口是
升级CodeIgniter 3到最新兼容版
下载CodeIgniter 3.1.13及以后的版本(官方已修复大部分PHP8兼容问题),替换项目中的system文件夹,注意保留自己的application目录、index.php等自定义文件。手动修复核心文件兼容问题(不升级时用)
打开system/database/drivers/mysqli/mysqli_driver.php,找到db_pconnect()方法,替换为:function db_pconnect() { // PHP 8.0+ 不支持旧持久连接逻辑,直接调用普通连接方法 return $this->db_connect(); }排查项目中的废弃函数
检查项目代码是否使用了PHP8已废弃的函数(如each()、create_function()),这些函数在CI3旧版本中可能存在,需要替换为现代写法(比如用foreach替代each())。临时调试:调整错误报告级别
在项目根目录的index.php开头添加代码,屏蔽废弃警告:error_reporting(E_ALL & ~E_DEPRECATED & ~E_WARNING);
内容的提问来源于stack exchange,提问作者Manjusha K Vijayan
相关产品推荐
相关产品推荐

