我尝试使用命令提示符在项目文件夹中运行php artisan
。然而,这个错误不断出现:
[ErrorException]
Undefined index: HTTP_USER_AGENT
在其他项目的文件夹中运行相同的命令(使用Laravel 4.2和5.1)效果良好。
根据我在Laracast上读到的内容:任何服务提供商都需要被评论掉。然而,在这个特殊的项目中,我没有。
您应该验证控制器构造函数或手工命令构造函数。它们可能在运行php artisan
时启动,如果在其中任何一个中直接使用HTTP_USER_AGENT
或启动任何需要HTTP_USER_AGENT
的代码,就会出现问题。
终于修复了!
这个问题是由routes.php中的一行引起的。具体来说,该代码旨在通过验证用户代理来过滤IE用户,如下所示:
if(preg_match('~MSIE|Internet Explorer~i', $_SERVER['HTTP_USER_AGENT']) || (strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false))
因此,对于artisan(通过CLI运行),不存在HTTP_USER_AGENT标头。导致此错误的原因:
[ErrorException]
Undefined index: HTTP_USER_AGENT
修复非常简单。只需将isset($_SERVER['HTTP_USER_AGENT']) &&
添加到if逻辑中,如下所示:
if(isset($_SERVER['HTTP_USER_AGENT']) && (preg_match('~MSIE|Internet Explorer~i', $_SERVER['HTTP_USER_AGENT']) || (strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)))