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

Laravel 9在Windows Server运行php artisan serve报Undefined array key 1错误

Laravel 9 在Windows Server下php artisan serve二次刷新崩溃问题

问题场景

本地用XAMPP(版本:xampp-windows-x64-8.1.6-0-VS16-installer)运行Laravel 9项目,执行php artisan serve完全正常;但把相同的XAMPP和Laravel应用部署到Windows Server后,首次加载页面没问题,二次刷新时CMD控制台直接抛出错误,服务随即停掉:

Undefined array key 1

之前在这台服务器上运行Laravel 8没出过这个问题。

错误栈详情

Undefined array key 1

  at D:\App-PHP\xampp_php_8\htdocs\test-project\vendor\laravel\framework\src\Illuminate\Foundation\Console\ServeCommand.php:289
    285▕     protected function getDateFromLine($line)
    286▕     {
    287▕         preg_match('/^\[([^\]]+)\]/', $line, $matches);
    288▕
  ➜ 289▕         return Carbon::createFromFormat('D M d H:i:s Y', $matches[1]);
    290▕     }
    291▕
    292▕     /**
    293▕      * Get the request port from the given PHP server output.

  1   D:\App-PHP\xampp_php_8\htdocs\test-project\vendor\laravel\framework\src\Illuminate\Foundation\Console\ServeCommand.php:289
      Illuminate\Foundation\Bootstrap\HandleExceptions::Illuminate\Foundation\Bootstrap\{closure}("Undefined array key 1", "D:\\App-PHP\\xampp_php_8\\htdocs\\test-project\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Console\\ServeCommand.php")

  2   D:\App-PHP\xampp_php_8\htdocs\test-project\vendor\laravel\framework\src\Illuminate\Foundation\Console\ServeCommand.php:239
      Illuminate\Foundation\Console\ServeCommand::getDateFromLine("27.0.0.1:65342 Accepted")

D:\App-PHP\xampp_php_8\htdocs\test-project>

原因分析

从报错信息能明确:Laravel的ServeCommand类里的getDateFromLine方法,想用正则匹配日志行开头的日期(格式如[Mon Jul 01 12:00:00 2024]),但Windows Server上的PHP内置服务器输出了27.0.0.1:65342 Accepted这种不带日期括号的行,导致正则匹配失败,$matches数组里没有下标1的元素,直接触发报错终止服务。

解决办法

临时修复(适合测试)

直接修改vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php里的getDateFromLine方法,增加判断逻辑避免报错:

protected function getDateFromLine($line)
{
    preg_match('/^\[([^\]]+)\]/', $line, $matches);

    // 匹配不到日期时返回当前时间
    if (!isset($matches[1])) {
        return Carbon::now();
    }

    return Carbon::createFromFormat('D M d H:i:s Y', $matches[1]);
}

注意:这个修改会在执行composer update后被覆盖,只适合临时验证问题。

永久解决方案(推荐)

放弃使用PHP内置服务器(php artisan serve),改用XAMPP的Apache配置虚拟主机来运行Laravel项目。这是服务器环境的标准部署方式,不仅能避免这类兼容性问题,性能和稳定性也更有保障。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:45:54