默认安装的不是laravel v11而是较旧稳定版,因packagist的latest指向滞后;应明确指定composer create-project laravel/laravel:^11.0并配置国内镜像、检查php≥8.2及必需扩展、运行php artisan key:generate生成app_key、确保storage和bootstrap/cache可写。

composer create-project 装出来的不是最新版?
默认执行 composer create-project laravel/laravel 会拉取 laravel/laravel 包的 latest 稳定版,但这个“latest”未必是你以为的“v11”——它取决于 packagist 上该包的 stable 分支指向。Laravel v11 在 2024 年 3 月才正式发布,而很多教程/镜像源缓存还没同步,容易装到 v10.48 或更早。
实操建议:
- 明确指定版本:用
composer create-project laravel/laravel:^11.0(注意^符号,支持小版本更新) - 加
--prefer-dist加速下载(从压缩包而非 git clone) - 国内用户务必先配置阿里云或腾讯云 Composer 镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 如果报
zlib_decode(): data error,大概率是镜像源没切干净,删掉~/.composer/cache/再试
php 版本和扩展不满足,artisan 命令直接报错
Laravel v11 要求 PHP >= 8.2,且必须启用 mbstring、openssl、pdo、tokenizer、xml、ctype、json 这些扩展。少一个,运行 php artisan 就会卡在 autoload 或直接抛 Fatal Error。
常见错误现象:
-
Class 'Illuminate\Foundation\Application' not found→autoload.php没加载成功,通常是json或mbstring缺失 -
Could not open input file: artisan→ 表面是路径问题,实际常因php命令调用的是系统自带的老版本(如 CentOS 自带 PHP 7.2) -
Mcrypt is required→ Laravel v9+ 已弃用 mcrypt,出现这提示说明你误装了老项目模板或 composer.lock 锁死了旧依赖
验证方式:在项目根目录下跑 php -m | grep -E 'mbstring|openssl|pdo',缺哪个补哪个;再用 php -v 确认版本。
APP_KEY 为空导致 session 和加密失败
新项目首次运行前,.env 里的 APP_KEY 是 base64: 开头的空值。不生成真实密钥,所有基于 encrypt()、session、signed URLs 的功能都会失效,比如登录后拿不到 session,或者 URL::signedRoute() 报 InvalidSignatureException。
必须做的一步:
- 进项目目录,立刻执行
php artisan key:generate - 别手动改
.env里的APP_KEY—— artisan 命令会自动写入并校验格式 - 如果部署到生产环境,
APP_KEY必须保密,不能提交到 Git;本地开发也建议加进.gitignore - 换过
APP_KEY后,所有已加密数据(如 Cookie、缓存的加密 session)全部失效,用户需重新登录
serve 启动后页面空白或 500,但控制台没报错
php artisan serve 默认监听 http://127.0.0.1:8000,看起来启动成功,但浏览器打开是空白或 500,通常不是 Laravel 本身的问题,而是底层环境或权限链路断了。
排查重点:
- 检查
storage/logs/laravel.log—— 90% 的真实错误都在这里,比如file_put_contents(/var/www/storage/logs/laravel.log): failed to open stream: Permission denied - 确认
storage和bootstrap/cache目录可写:chmod -R 775 storage bootstrap/cache(Linux/macOS) - Windows 用户如果用 WSL,注意 Windows 权限映射可能导致
php artisan serve无法监听端口,换用php -S 127.0.0.1:8000 -t public更可靠 - Chrome 浏览器偶尔会缓存 500 响应,强制刷新(Ctrl+F5)或换 Edge/Firefox 验证是否真出错
真正麻烦的是日志里出现 opcache.restrict_api 或 realpath(): open_basedir restriction —— 这说明 PHP 配置被主机商或 Docker 容器限制死,得改 php.ini 或容器配置,不是 Laravel 层能绕过的。











