本地运行Laravel项目访问时端口自动递增跳转问题排查
问题根因
端口逐次+1跳转的本质是PHP进程崩溃触发的Laravel开发服务自动重启:
- 本地启动的
php artisan serve依赖PHP内置开发服务器,你当前使用的PHP 7.4.1在Windows平台存在已知PDO扩展崩溃bug,只要执行数据库连接、查询类的PDO操作,就会触发内存错误导致当前服务进程直接异常退出 - Laravel的serve命令自带异常重启逻辑,检测到8000端口的服务进程终止后,会自动在8001端口拉起新服务,新服务再崩溃就继续往8002端口递增重启,和观察到的现象完全吻合
- 因为进程是直接崩溃终止,没有走完Laravel的异常上报流程,所以Laravel日志里查不到报错;Apache日志里记录的
Parent process exited abruptly就是进程异常退出的直接佐证。
修复方案
按操作成本从低到高排序:
- 优先升级本地CLI环境的PHP版本:直接把PHP 7.4.1替换为7.4分支的稳定修复版(推荐7.4.33,为7.4系列最终维护版本),这个PDO崩溃bug在PHP 7.4.2及以后的版本就已经被修复,升级后直接重启开发服务即可恢复正常
- 临时绕过方案:如果暂时不方便升级PHP,可以放弃使用
php artisan serve,直接把Laravel项目配置到本地XAMPP的Apache虚拟主机中,通过Apache服务访问项目,绕开存在bug的PHP内置开发服务器 - 兜底校验:版本升级完成后,核对项目
.env文件中的数据库连接配置(主机地址、端口、库名、用户名、密码)和本地数据库服务运行状态,排除配置错误导致的连接异常。
快速验证方法
- 先在项目根目录执行
php -v,确认命令行启动服务用的PHP版本确实是7.4.1,避免和Apache加载的PHP版本混淆 - 单独写一段最简PDO数据库连接代码用命令行执行,若能复现CLI进程直接退出的现象,即可确认是PHP版本本身的bug
- 升级PHP后重新启动开发服务,访问带数据库查询的路由,确认不再出现端口跳转即可。
内容的提问来源于stack exchange,提问作者jagadeesh
相关产品推荐
相关产品推荐

