2012-05-08 7 views
8

रिटर्न - Linux-get_browser() गलत

पर पीएचपी 5.3.8 चल रहा है शुरू करने के लिए, हम बिंदु है जहां फ़ंक्शन उम्मीद मूल्यों के लिए इस मुद्दे को हल कर लिया है। हालांकि अभी भी मेरे पास बहुत से अनुत्तरित प्रश्न हैं, और "समाधान" किसी भी चीज़ से हैक-आसपास है।

मैंने इस मुद्दे पर एक दिन का बेहतर हिस्सा बिताया है, इसलिए मेरे साथ भालू जैसा कि मैंने समझाया था कि क्या किया गया था। शुरू करने के लिए, समस्या यह है कि get_browser() का वापसी मूल्य FALSE है, जो एक दस्तावेज़ित वापसी मूल्य नहीं है। इससे मुझे लगता है कि FALSE वापस आने का मतलब है कि फ़ंक्शन के भीतर कुछ प्रकार की त्रुटि स्थिति है।

कई पुनरावृत्तियों के बाद परीक्षण कोड, बस एक साधारण var_dump(get_browser($agent, true)) बन गया। मैंने उपयोगकर्ता एजेंट स्ट्रिंग को सीधे पास करने के साथ-साथ कोई तर्क नहीं पारित करने के साथ परीक्षण चलाया, उदाहरण के लिए var_dump(get_browser()), कि सभी के पास एक ही वापसी मूल्य था।

क्या करने की कोशिश की गई थी/सत्यापित, वापसी मान में कोई परिवर्तन नहीं:

browscap.ini:

  • नवीनतम संस्करण, भी कुछ पिछले संस्करणों

का परीक्षण किया है अनुमतियां:

  • bowscap.ini - आरंभिक अनुमतियों 644 थे, लेकिन मैं 644-777

  • निर्देशिका युक्त browscap.ini से सब कुछ कोशिश की है - आरंभिक अनुमतियों 755 थे, साथ ही

  • कि PHP कर सकते हैं सत्यापित 777 की कोशिश की file()

उपयोगकर्ता एजेंट

तरह फ़ाइल और अन्य कार्यों के साथ डायरेक्ट्री तक पहुँचने
  • एक मैनुअल उपयोगकर्ता एजेंट स्ट्रिंग

  • की कोशिश की $ _SERVER गुजर गुजर कोशिश की [ 'HTTP_USER_AGENT']

  • एक दूर देश में एक दोस्त के साथ मेरी उपयोगकर्ता एजेंट स्ट्रिंग सत्यापित - get_browser() लौटे मूल्यों के रूप में उम्मीद ।

php।आरं

  • सही स्थान

  • echo count(file(ini_get('browscap')));

त्रुटि लॉग्स

  • चेक किए गए पीएचपी & अपाचे के साथ फिर से सत्यापित करने के लिए browscap सेटिंग अंक अं या 'browscap' के किसी भी उल्लेख के लिए लॉग या कुछ भी निकट से संबंधित - सामान्य से कुछ भी नहीं।

फ़ाइल संरचना

यह वह जगह है जहाँ मैं संदेह है कि त्रुटि से आता है। browscap.ini /var/php/ में रहता है, जिसमें उपर्युक्त उल्लेखनीय अनुमतियां हैं। मेरा विचार था कि शायद PHP इस निर्देशिका, या उन पंक्तियों के साथ कुछ नहीं पहुंच सका। हालांकि, यह निर्देशिका भी है जहां सत्र संग्रहीत किए जाते हैं, जिससे कम संभावना कम हो जाती है।

"समाधान"

क्या हल मुद्दा सार्वजनिक वेब निर्देशिका को browscap.ini आगे बढ़ रहा था। मैं उत्सुक हूं कि यह क्यों मामला है, विशेष रूप से अनियंत्रित वापसी मूल्य दिया गया है। "समाधान" काम करता है, लेकिन ऐसा समाधान नहीं है जिसे मैंने सोचा था ...

क्या get_browser() में विशेष अनुमति आवश्यकताएं हैं, या ऐसा कुछ भी है? file() निर्देशिका और फ़ाइल को ठीक से एक्सेस कर सकता है, लेकिन get_browser() (संभवतः) नहीं कर सका। मैंने इस मुद्दे पर व्यावहारिक रूप से अपने बालों को खींच लिया है और कुछ संकल्प पसंद करेंगे!

पढ़ने के लिए धन्यवाद!

+1

इस सुविधा का उपयोग आप किसके लिए कर रहे हैं? उपयोगकर्ता-एजेंट शीर्षलेख और इसे पहचानना बिल्कुल विश्वसनीय नहीं है। जावास्क्रिप्ट के साथ ब्राउज़र की क्षमताओं का परीक्षण करने और सर्वर को यह जानकारी भेजने के लिए शायद आपके पास बेहतर भाग्य होगा। हालांकि यह आवश्यक नहीं होना चाहिए, क्योंकि आप आमतौर पर भिन्नता 100% क्लाइंट पक्ष को संभालेंगे। – dqhendricks

+0

@dhehendricks यह एक (काफी बड़े) मौजूदा कोडबेस पर रखरखाव के लिए है। इस कॉल के मूल्य दोनों जगहों पर प्रीप्रोकैसिंग और सेवारत सामग्री दोनों जगहों पर उपयोग किए जाते हैं। मैं हमेशा चीजों को करने के नए/बेहतर तरीकों के लिए खुला रहता हूं, लेकिन संभवतः पूरे सिस्टम को अपने वर्तमान स्थिति में बदलने के लिए यह बहुत अधिक काम होगा। – orourkek

+0

मैं देखता हूं। तब अच्छी शुभकामनाएँ। – dqhendricks

उत्तर

4

असल में, मैन्युअल पृष्ठ पर भी दस्तावेज नहीं किया गया है, get_browser फ़ंक्शन कई कारणों से FALSE वापस कर सकता है।

कम से कम the underlying source code पर एक नज़र डालने दें।

मेरा सुझाव है कि आप वहां एक नज़र डालें और फिर यदि आपके पास अतिरिक्त प्रश्न हैं तो मुझे बताएं। मैं तब उन्हें जवाब देने में सक्षम हो सकता है।

+1

मैंने विभिन्न कारणों को देखा है कि यह झूठी वापसी कर सकता है, लेकिन उनमें से कोई भी पर्यावरण को देखते हुए कोई समझ नहीं लेता है। त्रुटि के लिए मेरा सबसे अच्छा अनुमान फ़ाइल को पढ़ने/खोलने में कुछ समस्या है, और मेरे विशिष्ट प्रश्न इस सिद्धांत से संबंधित हैं, उदा। अगर फ़ाइल() 'फ़ाइल तक पहुंच सकती है, तो 'get_browser()' क्यों नहीं हो सकता है? PHP को 'get_browser()' को छोड़कर, कई अज्ञात कारणों से विफल होने के कारण, इस फ़ाइल में कई फ़ंक्शंस के साथ खोलने, पढ़ने और लिखने में कोई समस्या नहीं है। – orourkek

4

आपने हर आवश्यक विधि के आसपास प्रयास किया है।

http://php.net/manual/en/function.get-browser.php होने ध्यान दें:

आदेश में इस के लिए काम करने के लिए, php.ini में अपने browscap विन्यास सेटिंग्स आपके सिस्टम पर browscap.ini फ़ाइल का सही स्थान को इंगित करना चाहिए।

browscap.ini PHP के साथ बंडल नहीं किया गया है, लेकिन आपको यहां एक अद्यतित »php_browscap.ini फ़ाइल मिल सकती है।

जबकि browscap.ini में कई ब्राउज़रों पर जानकारी है, यह डेटाबेस को चालू रखने के लिए उपयोगकर्ता अपडेट पर निर्भर करता है। फ़ाइल का प्रारूप काफी आत्म-व्याख्यात्मक है।

What solved the issue was moving browscap.ini to the public web directory. 

यह उस स्थान की ओर इशारा कर रहा है। यानी सार्वजनिक वेब निर्देशिका

Does get_browser() have special permissions requirements, or anything like that? 

पढ़ने की अनुमति केवल आवश्यक है।

+0

browscap.ini जिसका उपयोग किया गया था नवीनतम संस्करण उपलब्ध था। मैंने कई पिछले संस्करणों को भी आजमाया जो हमारे फाइल सिस्टम में थे। अनुमतियों के लिए, PHP ** ने फ़ाइल और निर्देशिका पर ** अनुमतियां पढ़ी थीं, और हम दोनों अभी तक 777 अनुमतियों को आजमाने के लिए भी गए थे। – orourkek

+0

मेरा कहना है कि php.ini में browscap सेटिंग है जो वास्तव में उस फ़ाइल का पथ है। जांचें कि यह कौन सी निर्देशिका इंगित कर रहा है। –

3

मेरे पास मूल पोस्टर के समान सटीक समस्या थी। समाधान? php.ini को browscap.ini फ़ाइल के लिए एक पूर्ण पथ की आवश्यकता है।

तो, भले ही PHP फ़ाइल मिल गया है और यह phpinfo() के उत्पादन में दिखाई दिया, निम्न पंक्ति समस्या थी:

browscap = browscap.ini 
कि लाइन के साथ

, getBrowser()false लौट आए।

तथापि, यह एक निरपेक्ष पथ को बदलने के लिए काम किया है, तो जैसे:

browscap = /etc/browscap.ini 

आशा इस कोई मदद करता है! यह एक अजीब है ...

+0

दिलचस्प बात यह है कि मैं जिस मुद्दे का सामना कर रहा था उसका कारण नहीं था - मैं मूल रूप से एक सापेक्ष पथ था, लेकिन मेरे डीबगिंग में पूर्ण रूप से बदल गया। हालांकि प्रासंगिक [स्रोत कोड] (http://lxr.php.net/xref/PHP_5_3/ext/standard/browscap.c#454) को देखते हुए कुछ ऐसे स्थान दिखाए जाते हैं जहां 'FALSE' वापस आती है। – orourkek

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

  • कोई संबंधित समस्या नहीं^_^