2011-06-24 13 views
24

मैं सिर्फ एक वेबसाइट के error_log और त्रुटि की है कि कई बार लॉग किया गया है में से एक के माध्यम से देख रहा है है:

[21-Jun-2011 12:24:03] PHP Notice: Undefined index: HTTP_USER_AGENT in /home/ukevents/public_html/lib/toro.php on line 130

लाइन इस के लिए toro.php में है संबंधित है:

private function ipad_request() { 
    return strstr($_SERVER['HTTP_USER_AGENT'], 'iPad'); 
} 

क्या यह HTTP अनुरोध द्वारा सेट नहीं होने के लिए $_SERVER['HTTP_USER_AGENT'] के लिए संभव है?

उत्तर

25

हां, यह संभव है, यह एक HTTP शीर्षलेख क्लाइंट द्वारा भेजा गया (या भेजा नहीं गया), और आपको उस पर भरोसा नहीं करना चाहिए।

उपयोगकर्ता-एजेंट की सामग्री:: php पुस्तिका से वर्तमान अनुरोध से हैडर, अगर कोई हो

तो सही कोड होगा:

private function ipad_request() { 
    return isset($_SERVER['HTTP_USER_AGENT']) && strstr($_SERVER['HTTP_USER_AGENT'], 'iPad'); 
} 
6

हां। कोई भी ब्राउज़र या उपयोगकर्ता-एजेंट User-Agent शीर्षलेख नहीं भेजना चुन सकता है। अगर वे उस हेडर को नहीं भेजते हैं, तो $_SERVER['HTTP_USER_AGENT'] सेट नहीं किया जाएगा।

का उपयोग यह सुनिश्चित करने के लिए करें कि $_SERVER['HTTP_USER_AGENT'] सेट है।

private function ipad_request() { 
    if(!isset($_SERVER['HTTP_USER_AGENT'])) return false; 

    return strstr($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false; 
} 
2

पीएचपी डॉक्स का कहना है:

'HTTP_USER_AGENT' उपयोगकर्ता-एजेंट के सामग्री: वर्तमान अनुरोध से हैडर, अगर वहाँ एक है।

(प्रासंगिक भाग इटालिसिस) तो ऐसा लगता है कि यह हमेशा सेट नहीं किया जा सकता है।

4

हां, यह संभव है, लेकिन यह नियमित अनुरोध के लिए कभी नहीं होता है।

सभी ब्राउज़र अनुरोध में ब्राउज़र स्ट्रिंग भेजते हैं, इसलिए बिना किसी अनुरोध के किसी भी अनुरोध से कुछ अन्य कार्यक्रम आते हैं। यहां तक ​​कि सभी अच्छी तरह से व्यवहार करने वाले बॉट्स एक ब्राउज़र स्ट्रिंग भेजते हैं, इसलिए आपको खोज इंजन में दिखाई देने के बारे में चिंतित होने की आवश्यकता नहीं है।

1

एक उदाहरण जहां HTTP_USER_AGENT अपरिभाषित है, यदि आपकी साइट के लिए गोडाडी के 404 पेज हैंडलर से अनुरोध आ रहा है, जहां आपने हैंडलर को अपने पृष्ठों में से एक माना है।

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