直接执行 composer create-project laravel/laravel myapp 默认安装 laravel 10.x,需显式指定 ^11.0 版本约束才能安装 laravel 11;同时必须确保 php ≥ 8.2 且启用 mbstring、openssl 等必需扩展,并在启动前运行 php artisan key:generate 生成有效 app_key。

直接装 laravel/laravel 不指定版本,大概率拿到的是 Laravel 10.x,不是你想要的 v11 —— 因为 Packagist 的 latest 标签还没自动切到 v11 stable,必须手动锁版本约束。
composer create-project 必须带 ^11.0 版本约束
默认命令 composer create-project laravel/laravel myapp 会忽略 v11,回落到最近的 stable tag(目前仍是 v10.48.x)。Laravel 11 已于 2024 年 3 月发布,但它的稳定版在 Packagist 上仍需显式声明才被识别。
- 正确写法:
composer create-project laravel/laravel:^11.0 myapp(^支持小版本更新,如 v11.5.x) - 如果想装 RC 或最新开发版,用:
composer create-project laravel/laravel:^11.0@rc myapp或composer create-project laravel/laravel:dev-main myapp - 国内用户务必提前配置镜像,否则下载极慢或中断:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 装完检查
myapp/composer.json里"laravel/framework"的 version 是否为^11.0,不是就说明没拉对
PHP 8.2+ 和扩展缺失会导致 artisan 直接报错
Laravel 11 强制要求 PHP ≥ 8.2.0,且以下扩展一个都不能少:mbstring、openssl、pdo、tokenizer、xml、ctype、json。缺任何一个,php artisan 都不会正常启动,错误往往藏在堆栈末尾,比如 Class 'Mbstring' not found。
- 验证 PHP 版本:
php -v,输出必须是PHP 8.2.x或更高 - 验证扩展是否启用:
php -m | grep -E 'mbstring|openssl|pdo|xml' - Mac 用户用 Homebrew:确保
brew link php@8.2已生效,别残留php@8.1 - Windows WSL 用户:用
apt install php8.2-cli php8.2-mbstring php8.2-xml php8.2-sqlite3,别用 Windows 自带 PHP - 常见假象:“artisan 文件存在但执行报错”,本质是 PHP 解析失败,不是路径问题
APP_KEY 为空会让整个应用启动失败
.env 里初始的 APP_KEY=base64: 是无效占位符,不生成真实密钥,Laravel 连日志、缓存、session 都初始化不了,页面直接 500 或抛 RuntimeException: No application encryption key has been specified。
- 必须在首次运行
php artisan serve前完成:cd myapp && cp .env.example .env && php artisan key:generate - 不要手改
.env里的APP_KEY——key:generate会校验格式并自动写入,手动填错 base64 会导致加密全链路失效 - 如果已启动失败,删掉
bootstrap/cache/config.php再重试,否则缓存会掩盖密钥缺失问题 - 这个步骤不能跳,也不能拖到“等页面出来再配”,它发生在框架引导早期,晚于这步就什么都做不了
php artisan serve 启动失败的三个硬性检查点
php artisan serve 报错,90% 情况下只跟三件事有关:目录位置、PHP 版本、端口占用。其他“配置问题”基本是干扰项。
- 确认当前 shell 在项目根目录:
ls -l artisan要能列出文件,否则就是路径错了 - 确认
php命令调用的是你刚验证过的 8.2+ 版本:which php和php -v要一致;CentOS 等系统可能自带老 PHP,需用绝对路径如/usr/local/bin/php artisan serve - 端口冲突时别硬杀进程,加参数换端口:
php artisan serve --port=8001 - 注意:Laravel 11 已移除内置
serve的 Apache/Nginx 集成支持,它现在纯依赖 PHP 内置服务器,别指望它自动配虚拟主机 - 如果
artisan命令本身报Could not open input file,先检查vendor/autoload.php是否存在 —— 不存在说明composer create-project没跑完,不是 Laravel 的锅
最易被忽略的其实是 PHP 扩展和 APP_KEY 的耦合影响:扩展缺失导致 key:generate 本身失败,而密钥缺失又让所有后续命令无法执行,形成死循环。建议把 php -m 和 php artisan key:generate 当作两个不可跳过的原子操作,顺序不能乱,环境不满足就停在这一步,别往下硬走。











