मैंने एक विशिष्ट बॉट को SemrushBot या googlebot (अन्य हो सकता है) के रूप में निकालने का प्रयास किया लेकिन यह काम नहीं करता है। शुक्रिया

    if(!preg_match('/SemrushBot/i', $_SERVER['HTTP_USER_AGENT']) || !preg_match('/googlebot/i', $_SERVER['HTTP_USER_AGENT']))
    {
      my code to execute
    }
-1
Arthur 10 नवम्बर 2019, 20:16

1 उत्तर

सबसे बढ़िया उत्तर

लॉरेंस चेरोन ने आपको पहले ही संकेत दे दिया था लेकिन आपने उसे त्याग दिया। सेट की गलत परिभाषा के कारण IF स्टेटमेंट में आपकी स्थिति हमेशा सत्य होती है।

यह एक विशिष्ट गलती है जिससे अनुभवी डेवलपर्स भी प्रतिरक्षा नहीं करते हैं। जब आप सेट के प्रतिच्छेदन/बहिष्करण के साथ काम करते हैं तो जटिल स्थिति की व्याख्या करना हमेशा कठिन होता है (दिमाग में चित्र का पुनर्निर्माण करें)।

आप जो हासिल करने की कोशिश कर रहे हैं वह यह जांचना है कि मूल्य मूल्यों के विशिष्ट सेट से संबंधित नहीं है या नहीं।

ऐसा करने के लिए आपको अपेक्षित मूल्यों के सेट को परिभाषित करने की आवश्यकता है और फिर जांच करें कि क्या मूल्य ऐसे विशिष्ट सेट से संबंधित है, तो आपको वांछित परिणाम प्राप्त करने के लिए इस तरह के चेक के परिणाम को उलटा करना होगा।

इसलिए आपको अनिवार्य रूप से पहले यह जांचना होगा कि क्या आगंतुक एक बूट है

$isBot = preg_match('/SemrushBot/i', $_SERVER['HTTP_USER_AGENT']) || preg_match('/googlebot/i', $_SERVER['HTTP_USER_AGENT']);

और फिर इसे उल्टा करें

$humanVisitor =  ! $isBot;
if ( $humanVisitor ){
    //do something specific to human visitors
}

या इसे गैर-उपयोगकर्ता के अनुकूल सिंगल लाइनर में करें

if(! ( preg_match('/SemrushBot/i', $_SERVER['HTTP_USER_AGENT']) || preg_match('/googlebot/i', $_SERVER['HTTP_USER_AGENT']) )){
    //do something specific to human visitors
}

मेरी सलाह है कि यदि संभव हो तो ऐसी स्थिति को कई पंक्तियों में विभाजित करें, फिर जो कोई भी बाद में कोड समीक्षा करेगा, उसे आपके कोड को समझने में कोई कठिनाई नहीं होगी

1
Maxim Sagaydachny 24 नवम्बर 2019, 12:18