You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel本地服务打开数页后自动停止问题求助

解决Laravel 9.52.6中php artisan serve无提示且服务崩溃的问题

问题现象

  • 执行php artisan serve后,控制台不显示Server running on [http://127.0.0.1:8000]提示,但站点可通过该地址正常访问
  • 访问少量页面后服务自动停止,需两次执行启动命令才能重启
  • 服务崩溃时抛出Undefined array key 1错误,触发点在Illuminate\Foundation\Console\ServeCommand.php的getRequestPortFromLine方法

环境配置

  • Laravel版本:9.52.6
  • PHP版本:8.2.4
  • Composer版本:2.5.5

错误详情

ErrorException

Undefined array key 1

at D:\Edu\vendor\laravel\framework\src\Illuminate\Foundation\Console\ServeCommand.php:323
    319▕     protected function getRequestPortFromLine($line)
    320▕     {
    321▕         preg_match('/:(\d+)\s(?:(?:\w+$)|(?:\[.*))/', $line, $matches);
    322▕
  ➜ 323▕         return (int) $matches[1];
    324▕     }

  1   D:\Edu\vendor\laravel\framework\src\Illuminate\Foundation\Console\ServeCommand.php:323
      Illuminate\Foundation\Bootstrap\HandleExceptions::Illuminate\Foundation\Bootstrap\{closure}("Undefined array key 1", "D:\Edu\vendor\laravel\framework\src\Illuminate\Foundation\Console\ServeCommand.php")

  2   D:\Edu\vendor\laravel\framework\src\Illuminate\Foundation\Console\ServeCommand.php:253
      Illuminate\Foundation\Console\ServeCommand::getRequestPortFromLine("9500 Accepted")

问题原因

getRequestPortFromLine方法中的正则表达式/:(\d+)\s(?:(?:\w+$)|(?:\[.*))/仅能匹配带冒号的端口格式(如:8000 Accepted),但PHP内置服务器输出的日志行可能是9500 Accepted(无冒号),导致正则匹配失败,$matches数组不存在索引1,触发未定义数组键错误,进而导致服务崩溃。

解决方案

1. 临时修复源码(不推荐长期使用)

修改vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php中的getRequestPortFromLine方法,增加数组键存在性检查,并调整正则适配无冒号的端口格式:

protected function getRequestPortFromLine($line)
{
    preg_match('/:?(\d+)\s(?:(?:\w+$)|(?:\[.*))/', $line, $matches);

    return isset($matches[1]) ? (int) $matches[1] : 8000;
}

注意:修改vendor目录文件后,执行composer update会覆盖修改,可使用cweagans/composer-patches工具生成持久化补丁。

2. 升级Laravel版本

该问题已在Laravel 9.x的后续补丁版本及更高主版本中修复,执行以下命令升级:

composer update laravel/framework --with-all-dependencies

3. 替换开发服务器

放弃使用php artisan serve,改用更稳定的开发服务器:

  • 直接使用PHP内置服务器:
    php -S 127.0.0.1:8000 -t public
    
  • 配置本地虚拟主机(如XAMPP/WAMP/Nginx)
  • 使用Laravel Valet(仅Mac环境)

内容的提问来源于stack exchange,提问作者rafig khiyavi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:53:20