Laravel 9在Windows Server运行php artisan serve报Undefined array key 1错误
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

