PHP Неопределенный индекс: HTTP_USER_AGENT

Следующий код проверяет пользовательский агент, обращающийся к сайту, но я получаю сообщение об ошибке. Что мне нужно обновить для размещения сценариев, когда пользовательский агент не установлен?

ОШИБКА PHP Примечание: Неопределенный индекс: HTTP_USER_AGENT в Utils.php в строке 7

КОД

public static function detectBrowser() { $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); if (preg_match('/opera/', $userAgent)) { $name = 'opera'; } elseif (preg_match('/webkit/', $userAgent)) { $name = 'safari'; } elseif (preg_match('/msie/', $userAgent)) { $name = 'msie'; } elseif (preg_match('/mozilla/', $userAgent) && !preg_match('/compatible/', $userAgent)) { $name = 'mozilla'; } else { $name = 'unrecognized'; } if (preg_match('/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/', $userAgent, $matches)) { $version = $matches[1]; } else { $version = 'unknown'; } if (preg_match('/linux/', $userAgent)) { $platform = 'linux'; } elseif (preg_match('/macintosh|mac os x/', $userAgent)) { $platform = 'mac'; } elseif (preg_match('/windows|win32/', $userAgent)) { $platform = 'windows'; } else { $platform = 'unrecognized'; } return array( 'name' => $name, 'version' => $version, 'platform' => $platform, 'userAgent' => $userAgent ); } 

Заголовок User-Agent не является обязательным. Брандмауэры могут фильтровать его, или люди могут настроить своих клиентов, чтобы опустить его. Просто проверьте с помощью isset() если он существует. Или даже лучше, используйте !empty() поскольку пустой заголовок тоже не будет полезен:

 public static function detectBrowser() { if(empty($_SERVER['HTTP_USER_AGENT'])) { return array( 'name' => 'unrecognized', 'version' => 'unknown', 'platform' => 'unrecognized', 'userAgent' => '' ); } // your old code here } 

Однако, поскольку весь ваш код работает нормально на пустой строке, а также дает «неизвестные» значения, вы можете просто изменить следующую строку:

 $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); 

как это:

 $userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : ''; 

использовать isset:

 if( !isset( $_SERVER['HTTP_USER_AGENT'])){ $name = "none"; }else{ $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); if (preg_match('/opera/', $userAgent)) { $name = 'opera'; } [... yourcode ...] }