codeigniter 4 安装失败90%因未用官方命令:必须执行composer create-project codeigniter4/appstarter myproject,否则缺失public/、writable/目录、.env文件及post-create-project-cmd脚本,导致spark不可用、migrationrunner报错、403/空白页等问题。

CodeIgniter 4 安装失败,90% 不是 Composer 报错本身的问题,而是入口路径、PHP 扩展或 Apache 配置没对齐——直接 composer create-project codeigniter4/appstarter 才是唯一推荐的启动方式,composer install 单独运行会缺 public/index.php 和引导文件。
为什么 composer install 总是失败?
你手动生成了 vendor/ 目录,但没生成框架必需的入口结构。CI4 不是传统“下载 ZIP 解压就能跑”的框架,它依赖 appstarter 模板里预置的 public/、writable/ 权限配置和自动加载映射。
- 错误现象:
Call to undefined function CodeIgniter\Autoloader\Autoloader::load()或首页空白/500 - 正确做法:必须用官方创建命令,例如:
composer create-project codeigniter4/appstarter myapp - 如果已手动解压 ZIP,得补全两件事:
composer dump-autoload+ 手动复制public/index.php并修正其中的require FCPATH . '../vendor/autoload.php';路径 - Windows 下注意路径分隔符:
FCPATH是__DIR__ . DIRECTORY_SEPARATOR,别硬写/导致vendor加载失败
PHP 扩展缺失导致安装卡在 intl 或 mysqli
composer create-project 过程中报 ext-intl 或 ext-mysqli missing,说明 PHP CLI 环境没启用对应扩展——Web 服务器(如 Apache)启用了不等于命令行启用了。
- 先确认 CLI 实际加载的
php.ini:php --ini输出的Loaded Configuration File路径才是你要改的文件 - 开启
intl:找到extension=intl行,删掉前面的分号;Windows 下还要确认extension_dir指向真实目录(如C:/php/ext),且php_intl.dll文件存在 - 开启
mysqli:Windows 必须写全名extension=php_mysqli.dll,不能只写mysqli;同时检查是否误启用了已废弃的php_mysql.dll(CI4 不兼容) - 改完后重启终端再试
composer,别信 XAMPP/WAMP 界面点的“Restart”——它不一定重载 CLI 的 PHP 配置
Apache + CI4 路由 404 / 去不掉 index.php
改了 $config['index_page'] = '' 还是 404,根本不是框架问题,是 Apache 没把请求正确转发给 CI4 的路由引擎。
- 检查
httpd.conf是否启用重写模块:LoadModule rewrite_module modules/mod_rewrite.so前不能有# - 确认项目所在目录的
<directory></directory>区块包含AllowOverride All(注意大小写,all无效) - CI4 项目别直接放
htdocs/根下,建议建子目录如htdocs/myapp,然后在myapp/.htaccess里把RewriteBase改成RewriteBase /myapp/ - Linux/macOS 下还要确保
writable/目录可写:chmod -R 777 writable;Windows 下则要右键目录 → 属性 → 安全 → 给 IIS 用户或 Apache 服务账户写入权限
数据库连接报 Client does not support authentication protocol
这是 MySQL 8.0+ 默认使用 caching_sha2_password 认证插件,而 PHP 的 mysqli 扩展(尤其旧版本)不支持——不是 CI4 配置错了,是底层驱动不认。
- 临时解决:登录 MySQL,执行
ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 长期方案:升级 PHP 到 7.4+ 并确认
mysqli扩展编译时启用了--with-mysqlnd(XAMPP 8.2+ 自带) - CI4 的
app/Config/Database.php中不要设'DBDriver' => 'mysql',应为'mysqli'(CI4 已弃用mysql驱动) - 如果用 PDO,得额外确认
extension=pdo_mysql在php.ini中已启用
最常被忽略的一点:XAMPP/WAMP 的 Apache 和 PHP CLI 使用的是两套独立配置,哪怕你改对了 Apache 的 php.ini,composer 仍可能用着另一份——务必用 php --ini 和 php -m 双验证。











