php artisan serve启动失败通常因端口被占、配置缓存未清或.env配置错误;应先查端口占用、执行php artisan config:clear,并确认app_env=local与app_debug=true有效。

php artisan serve 启动失败?先别急着重装,90% 的问题出在端口、缓存或 .env 配置上,而不是 Laravel 本身。
php artisan serve 启动报 Address already in use 怎么办
这是开发中最常遇到的阻塞点:命令执行后提示 Address already in use,但页面打不开。根本原因不是 Laravel 坏了,而是 8000 端口被其他进程占用了。
解决步骤很直接:
- 查端口占用:
lsof -i :8000(macOS/Linux)或netstat -ano | findstr :8000(Windows),看 PID 是哪个进程 - 杀掉它:
kill -9 [PID]或 Windows 上用taskkill /F /PID [PID] - 换端口启动更省事:
php artisan serve --port=8001,尤其当你同时跑 Valet、Docker 或另一个 Laravel 项目时 - 别用
sudo php artisan serve绑定 80 端口——开发阶段完全没必要,反而可能因权限问题导致storage目录写入失败
.env 修改后 APP_DEBUG=true 不生效
Laravel 启动时只读一次 .env,之后全靠缓存。改完文件不清理缓存,等于白改。
必须执行这两步:
-
php artisan config:clear—— 清掉配置缓存,强制重新加载.env - 确认
APP_ENV=local和APP_DEBUG=true同时存在且拼写正确 ——APP_DEBUG在production环境下永远无效 - 检查是否误提交了
.env到 Git,或部署时覆盖了本地配置
MySQL 连接报 SQLSTATE[HY000] [1045] Access denied
这不是 Laravel 的错,是凭据没对上。常见于 MAMP、Docker 或 Homebrew 安装的 MySQL 实例。
重点排查这几项:
-
DB_HOST写127.0.0.1,别写localhost—— 后者在很多环境下会走 Unix socket,而 Laravel 默认走 TCP -
DB_DATABASE必须是已存在的库名,Laravel 不会自动创建数据库,得自己先执行:mysql -u root -p -e "CREATE DATABASE myapp;" - Homebrew 装的 MySQL 默认 root 密码为空;MAMP 默认是
root;Docker 容器里要看你docker-compose.yml里定义的MYSQL_ROOT_PASSWORD - 如果用 Docker,
DB_HOST应该填容器名(如mysql),不是127.0.0.1—— 容器内 localhost 指向自身,不是宿主机
composer create-project 拉到的不是 LTS 版本
默认命令 composer create-project laravel/laravel 总是拉最新稳定版,但新版本可能带 breaking change 或依赖更高版本的 PHP/MySQL。
要稳,就明确指定 LTS:
- 装 Laravel 10(当前 LTS):
composer create-project laravel/laravel:^10.0 myapp - 装 Laravel 11(需 PHP 8.2+、MySQL 8.0+):
composer create-project laravel/laravel:^11.0 myapp - 装完立刻验证:
php artisan --version,别只看composer.lock里的字段 - 别先拉默认版再手动改
composer.json版本号 —— 很容易因依赖冲突卡在composer install
.env 或换运行方式,记得多问一句:我清缓存了吗?端口空着吗?host 对得上实际服务位置吗?











