2013-01-02 25 views
16

निम्न कोड साइट एक्सेस करने वाले उपयोगकर्ता एजेंट को मान्य करता है हालांकि मुझे त्रुटि मिल रही है। उन परिदृश्यों को समायोजित करने के लिए मुझे अपडेट करने की क्या आवश्यकता है जहां कोई उपयोगकर्ता एजेंट सेट नहीं किया जा रहा है?PHP अपरिभाषित अनुक्रमणिका: HTTP_USER_AGENT

त्रुटि पीएचपी नोटिस: अपरिभाषित सूचकांक: 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 
     ); 
    } 

उत्तर

41

उपयोगकर्ता-एजेंट हेडर वैकल्पिक है। फ़ायरवॉल इसे फ़िल्टर कर सकता है या लोग अपने ग्राहकों को इसे छोड़ने के लिए कॉन्फ़िगर कर सकते हैं। यदि यह मौजूद है तो बस 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']) 
       : ''; 
3

उपयोग isset:

if(!isset($_SERVER['HTTP_USER_AGENT'])){ 
    $name = "none"; 
}else{ 
    $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); 

    if (preg_match('/opera/', $userAgent)) { 
     $name = 'opera'; 
    } [... yourcode ...] 
} 
+0

सुंदर विशाल 'else' ब्लॉक IMO – ThiefMaster

+5

मुझे पता है के साथ बदसूरत, लेकिन यह सवाल नहीं था। –

संबंधित मुद्दे