2016-04-06 2 views
2

Я попытался запустить php artisan в папке проекта с помощью командной строки. Тем не менее, эта ошибка продолжает появляться:PHP artisan return Undefined index: HTTP_USER_AGENT

[ErrorException] 
    Undefined index: HTTP_USER_AGENT 

Запуск той же команды в папке других проектов (С Laravel 4.2 и 5.1) работали отлично.

Из того, что я читал на Laracast: любые поставщики услуг должны быть закомментированы. Однако в этом конкретном проекте у меня его нет.

+0

Вы имеете в виду, что вы запускаете это через CLI? Тогда там _is_ не задействован HTTP, поэтому вы не можете ожидать заголовок HTTP-запроса этого имени (или любого другого), который должен присутствовать. – CBroe

ответ

1

Вы должны проверить свои конструкторы контроллеров или конструкторы команд artisan. Они могут запускаться при запуске php artisan, и если в любом из них вы используете напрямую HTTP_USER_AGENT или запускаете любой фрагмент кода, который требует HTTP_USER_AGENT, это создает проблему.

0

Наконец-то исправлено!

Проблема вызвана линией в routes.php. Конкретно, код предназначен для фильтрации пользователей IE путем проверки агента пользователя, как это:

if(preg_match('~MSIE|Internet Explorer~i', $_SERVER['HTTP_USER_AGENT']) || (strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)) 

Так с ремесленника (которая проходит через 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))) 
+0

Разве это не было бы более целесообразным, чем раньше? А также абстрагирование этого регулярного выражения на объект многократного использования, который можно добавить к нему позже? – ash