PHP Undefined index: HTTP_USER_AGENT

Il seguente codice di convalida l’agente utente di accedere al sito, tuttavia, ottengo un errore. Di cosa ho bisogno per aggiornamento per supportare scenari in cui non c’è nessun agente utente impostato?

ERRORE
PHP Notice: Undefined index: HTTP_USER_AGENT in Utils.php sulla linea 7

CODICE

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
        );
    }
InformationsquelleAutor PeanutsMonkey | 2013-01-02



2 Replies
  1. 50

    L’intestazione Agente Utente è facoltativo. I firewall possono filtrare o persone che possono configurare il proprio client di ometterlo. Controllare semplicemente utilizzando isset() se esiste. O ancora meglio, utilizzare !empty() come intestazione vuota non sarà molto utile:

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

    Tuttavia, dal momento che tutto il codice sembra funzionare bene su una stringa vuota e produrre anche lo “sconosciuto” valori si potrebbe semplicemente modificare la seguente riga:

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

    come questo:

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

    usare isset:

    if( !isset( $_SERVER['HTTP_USER_AGENT'])){
        $name = "none";
    }else{
         $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
    
        if (preg_match('/opera/', $userAgent)) {
            $name = 'opera';
        } [... yourcode ...]
    }
    • Abbastanza brutto con l’enorme else blocco IMO
    • Lo so, ma che non era la domanda.

Lascia un commento