laravel 11 要求 php ≥ 8.2,linux mint 21 默认 php 8.1 不满足条件,必须通过 ondřej surý ppa 安装 php 8.2+ 及必需扩展,并搭配 composer 2.5+ 和手动创建 .env 文件才能正常安装与运行。

直接说结论:Laravel 11 要求 PHP ≥ 8.2,而 Linux Mint 21 默认带的是 PHP 8.1 —— 不升级 PHP 就跑不起来 composer create-project,更别提 php artisan serve。
确认 PHP 版本是否达标
运行 php -v,如果输出是 PHP 8.1.x(Mint 21 默认情况),那必须先升到 8.2+。Ubuntu/Debian 系发行版不提供官方 PHP 8.2 仓库,得靠第三方源:
- 添加 Ondřej Surý 的 PPA:
sudo add-apt-repository ppa:ondrej/php - 更新包列表:
sudo apt update - 安装 PHP 8.2 及必要扩展:
sudo apt install php8.2 php8.2-cli php8.2-mbstring php8.2-xml php8.2-bcmath php8.2-zip php8.2-curl php8.2-opcache - 切换默认 PHP 版本(可选但推荐):
sudo update-alternatives --config php,选中php8.2
注意:别删掉旧 PHP,某些系统服务(如 APT 的 post-install hooks)可能还依赖它;只改 CLI 默认即可。
安装 Composer 并验证兼容性
Laravel 11 强制要求 Composer 2.5+,旧版会报错 Your Composer version is outdated:
- 卸载旧 Composer:
sudo rm /usr/local/bin/composer - 下载最新稳定版:
curl -sS https://getcomposer.org/installer | php - 全局安装:
sudo mv composer.phar /usr/local/bin/composer - 验证:
composer --version应输出类似Composer version 2.7.7
如果执行 composer create-project laravel/laravel 卡在 “Resolving dependencies”,大概率是 Composer 版本不够或网络问题(国内建议配阿里镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/)。
.env 文件不存在?不是 bug,是设计
Laravel 11 不再自动复制 .env.example —— 这是故意的。项目初始化后,.env 必须手动创建:
- 进入项目目录:
cd your-laravel-app - 复制模板:
cp .env.example .env - 生成密钥:
php artisan key:generate(这步失败?说明.env权限不对或内容有语法错误)
常见坑:.env 文件不能有 BOM 头、不能用 Windows 换行符(\r\n)、APP_KEY 行末不能有多余空格。用 file .env 看编码,用 dos2unix .env 清理换行符。
启动失败:artisan serve 报 Class 'Illuminate\Foundation\Application' not found
这是典型的 autoloader 没生效,根本原因是 vendor/autoload.php 没被正确加载。检查三件事:
-
composer install是否完整执行(不是composer update)?Laravel 11 要求先install再key:generate -
vendor/目录下是否有autoload.php?没有就重装:composer install --no-dev - PHP 是否启用了
opcache?Laravel 11 对 OPCache 更敏感,sudo phpenmod opcache后重启 Apache 或 Nginx
如果用 php artisan serve 启动,别忘了它默认绑定 127.0.0.1:8000,防火墙或 SELinux(虽 Mint 默认没开)也可能拦截 —— 先用 curl http://127.0.0.1:8000 本地测通再查端口暴露问题。
最易被忽略的点:Laravel 11 移除了 resources/lang 下的预置语言包,如果你的应用里写了 __('welcome') 却没自己定义 lang/en.json,页面会白屏且日志里只有“Missing translation key”,不会报 PHP 错误 —— 这类静默失败得去 storage/logs/laravel.log 里翻。











