【问题标题】:PHP artisan return Undefined index: HTTP_USER_AGENTPHP 工匠返回未定义的索引:HTTP_USER_AGENT
【发布时间】:2016-07-27 00:05:51
【问题描述】:

我尝试使用命令提示符在项目文件夹中运行php artisan。但是,这个错误不断弹出:

  [ErrorException] 
  Undefined index: HTTP_USER_AGENT

在其他项目的文件夹(使用 Laravel 4.2 和 5.1)中运行相同的命令效果很好。

根据我在 Laracast 上阅读的内容:任何服务提供商都需要被注释掉。但是,在这个特定的项目中,我没有。

【问题讨论】:

  • 你的意思是你通过 CLI 运行这个?那么没有不涉及HTTP,所以你不能指望那个名字(或任何其他名字)的HTTP请求头存在。

标签: php xampp laravel-5.1 laravel-artisan


【解决方案1】:

您应该验证您的控制器构造函数或工匠命令构造函数。它们可能会在运行 php artisan 时启动,如果您在其中任何一个中直接使用 HTTP_USER_AGENT 或启动任何需要 HTTP_USER_AGENT 的代码,就会出现问题。

【讨论】:

    【解决方案2】:

    终于修好了!

    问题是由 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)))
    

    【讨论】:

    • 这样不是更适合之前的Route中间件吗?以及将该正则表达式抽象为可重用的对象,以便以后添加?
    猜你喜欢
    • 2013-04-26
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    相关资源
    最近更新 更多