PHP手工返回未定义的索引:HTTP_USER_AGENT


PHP artisan return Undefined index: HTTP_USER_AGENT

我尝试使用命令提示符在项目文件夹中运行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)))