app_key未生成会导致session和加密失效,访问时出现500错误或登录失败;必须执行php artisan key:generate生成32字节base64密钥并写入.env,否则encrypter初始化失败。

APP_KEY 没生成,session 和加密直接失效
运行 php artisan serve 能起来,但一访问就 500 或登录失败,大概率是 APP_KEY 还没生成。Laravel 不会在 laravel new 后自动执行 key:generate,它只写进 .env 的占位符 APP_KEY=base64:,后面一串空的。
实操建议:
- 创建项目后立刻跑:
php artisan key:generate - 检查
.env文件里APP_KEY值是否已变成 32 字节 base64 字符串(如base64:abc123...) - 别手动改
APP_KEY—— 用命令生成,否则encrypter初始化会失败
storage 和 bootstrap/cache 目录不可写
Linux/macOS 下默认权限不允许 Web 服务器进程写入,Windows 上 IIS/Apache 用户组没加进去也一样。现象包括:缓存无法生成、日志写不进 storage/logs、php artisan config:cache 报错 “failed to write cache file”。
实操建议:
-
chmod -R 775 storage bootstrap/cache(非 root 用户推荐 775,不是 777) - Windows 用户需右键目录 → 属性 → 安全 → 给 IIS_IUSRS 或 Apache 对应用户添加“修改”权限
- 别跳过这步就跑
php artisan migrate—— 迁移成功但视图缓存失败,后续页面可能白屏
没配 .env 就直接访问,数据库连不上还报错不明确
新手常以为 DB_DATABASE、DB_USERNAME 这些只是开发时才配,其实 Laravel 启动时就会尝试连接数据库(比如加载迁移文件、检查 schema)。如果 .env 里还是默认的 sqlite 路径,而你本地没建 database/database.sqlite,或者 MySQL 配置全空,artisan 命令会直接抛出 PDO 异常,但错误信息藏在底层,容易误判为框架问题。
实操建议:
- 确认
.env中至少填了:DB_CONNECTION、DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD - SQLite 用户必须确保
database/database.sqlite文件存在且可写:touch database/database.sqlite && chmod 664 database/database.sqlite - 改完
.env必须清配置缓存:php artisan config:clear,否则新值不生效
vendor/autoload.php 找不到,其实是 composer install 没跑完
报错 require(): Failed opening required 'vendor/autoload.php',第一反应常是路径错了,但真实原因九成是 composer install 半途退出或被中断——尤其在国内网络环境下,依赖下载卡住、超时、镜像失效都可能导致 vendor/ 目录为空或只有 bin/ 子目录。
实操建议:
- 先确认当前目录下有
composer.json和artisan—— 必须是项目根目录 - 运行
ls -la vendor/,如果输出为空或只显示bin/,说明安装失败 - 重试前先删掉
vendor/和composer.lock,再跑:composer install --prefer-dist - 别用
composer update替代 —— 它依赖composer.lock,而新项目根本还没这个文件
APP_KEY,config:clear 可能失败;vendor 没装好,key:generate 根本跑不起来。漏掉任意一环,后面所有命令都会变成“看起来在执行,实际卡在某个隐式依赖上”。











