Laravel使用php artisan serve多设备访问报Undefined array key 1错误求助
解决Laravel artisan serve多设备访问后报错"Undefined array key 1"的问题
核心原因
php artisan serve依赖PHP内置开发服务器,其日志输出格式在多设备并发访问时可能偏离预期,导致ServeCommand.php中解析启动时间的正则匹配失败,无法获取$matches[1]从而抛出数组键不存在的错误。
解决方案
1. 改用正式Web服务器(推荐)
PHP内置服务器仅适合单设备开发调试,不支持多设备并发访问,建议改用XAMPP自带的Apache:
- 将Laravel项目放置在XAMPP的
htdocs目录下(即你的C:\xampp2\htdocs\final_laravel\pgrcdata) - 打开XAMPP的Apache配置文件
httpd-vhosts.conf,添加虚拟主机配置:<VirtualHost *:80> DocumentRoot "C:/xampp2/htdocs/final_laravel/pgrcdata/public" ServerName 192.168.1.8 </VirtualHost> - 重启Apache服务,同一网络设备直接访问
http://192.168.1.8即可。
2. 临时修复ServeCommand.php代码(不推荐,vendor更新会覆盖)
找到报错文件C:\xampp2\htdocs\final_laravel\pgrcdata\vendor\laravel\framework\src\Illuminate\Foundation\Console\ServeCommand.php,修改对应代码块:
原代码:
preg_match('/^\[([^\]]+)\] PHP \d+\.\d+\.\d+ Development Server \(http:\/\/.*:\d+\) started$/', $output, $matches); return Carbon::createFromFormat('D M d H:i:s Y', $matches[1]);
修改为:
preg_match('/^\[([^\]]+)\] PHP \d+\.\d+\.\d+ Development Server \(http:\/\/.*:\d+\) started$/', $output, $matches); // 增加匹配结果判断,避免数组键不存在 if (!isset($matches[1])) { return Carbon::now(); } return Carbon::createFromFormat('D M d H:i:s Y', $matches[1]);
3. 升级Laravel框架版本
该问题属于框架已知bug,部分旧版本Laravel未处理日志格式异常的情况,执行以下命令升级到最新稳定版:
composer update laravel/framework
内容的提问来源于stack exchange,提问作者Ranga
相关产品推荐
相关产品推荐

