Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Condizione tramite contenuto $HTTP_USER_AGENT;

    Salve a tutti!
    Vorrei escludere i motori di ricerca dal mio sistema di report degli accessi al sito in php.
    Visto che i principali motori a causarmi "falsi accessi" sono 3 (MSN, Google, Yahoo), ho pensato di fare un controllo tramite il loro $HTTP_USER_AGENT .

    Ad un array "fisso" nello script (cioè non si autogenera) ho assegnato i tre output:

    $spider_user_agent[1] = "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) ";
    $spider_user_agent[2] = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) ";
    $spider_user_agent[3] = "msnbot/1.0 (+http://search.msn.com/msnbot.htm) ";

    [Scusate se il forum vi dà i link dei motori...]

    Creo una variabile contatore "fissa"
    $spider_search_engine_n=3;

    Passo alla variabile $sys l'User Agent dell'esecutore dello script:
    $sys = $HTTP_USER_AGENT;


    Poi la condizione:
    for ($i = 1; $i <= $spider_search_engine_n; $i++) {
    if ($spider_user_agent[$i]==$sys){
    $spider_search_engine_ctr=1;
    }


    Ed infine:
    if ($spider_search_engine_ctr!=1){non è un bot: fai quello che devi fare}else{è un bot: ignora l'accesso}

    Questo script non funziona. Perchè? Mi sorge un dubbio: non è che forse non si possono fare "controlli" (==) su questo tipo di variabili?
    Vi prego, illuminatemi!
    Grazie a tutti!
    Tom

  2. #2
    Utente di HTML.it L'avatar di jeppox
    Registrato dal
    Mar 2007
    Messaggi
    436
    anzi che usare "==" è forse meglio usare "preg_match", prova così dovrebbe anadare:

    Codice PHP:
    for ($i 1$i <= $spider_search_engine_n$i++) 
    {
        if(
    preg_match($spider_user_agent[$i], $sys){
        
    $spider_search_engine_ctr=1;


  3. #3
    Originariamente inviato da jeppox
    anzi che usare "==" è forse meglio usare "preg_match", prova così dovrebbe anadare:

    Codice PHP:
    for ($i 1$i <= $spider_search_engine_n$i++) 
    {
        if(
    preg_match($spider_user_agent[$i], $sys){
        
    $spider_search_engine_ctr=1;

    Ho fatto la modifica ma ancora non funziona, chi mi aiuta?

  4. #4

  5. #5

  6. #6
    Ho inserito il tuo script... Mi chiedevo, non è che magari contano gli spazi alla fine dell'output user_agent? Il browser, quando faccio una query per scriverli e vado a selezionarli (come ho fatto quando ho copiato e inserito i 3 contenuti dell'array $spider_user_agent[]), mi dà uno spazio (%20 per intenderci) alla fine dell'output, che come potete notare ho lasciato anche nell'inserimento nell'array (vedi sotto)

    $ctr=0;
    $spider_search_engine_ctr=0;
    $sys = $HTTP_USER_AGENT;
    $spider_search_engine_n=3;

    $spider_user_agent[1]="Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) "; ( Ecco, lo spazio tra 'slurp)' e '";' )
    $spider_user_agent[2]="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) ";
    $spider_user_agent[3]="msnbot/1.0 (+http://search.msn.com/msnbot.htm) ";

    for ($i = 1; $i <= $spider_search_engine_n; $i++)
    {
    if (preg_match($spider_user_agent[$i], $sys)) {$spider_search_engine_ctr=1;}

  7. #7
    Se questo è tutto il tuo codice, manca la graffa che chiude il ciclo di for!
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  8. #8
    Certo, chiaramente questo non è tutto il codice... il codice è debuggato correttamente e lavora, ma non come vorrei!

  9. #9
    Utente di HTML.it L'avatar di jeppox
    Registrato dal
    Mar 2007
    Messaggi
    436
    nelle espressioni regolari devi mascherare gli slash e togliere quei segni non validi tipo il "+".
    per automatizzare un attimo ti conviene sostituire il tuo "3" statico con "count($spider_user_agent)".

    prova cosi:

    Codice PHP:
    <?php
    $ctr
    =0;
    $spider_search_engine_ctr=0;
    $sys $_SERVER["HTTP_USER_AGENT"];

    $spider_search_engine_n=count($spider_user_agent);

    $spider_user_agent[1] = "Mozilla\/5.0 (compatible; Yahoo! Slurp; http:\/\/help.yahoo.com\/help\/us\/ysearch\/slurp)";
    $spider_user_agent[2] = "Mozilla\/5.0 (compatible; Googlebot\/2.1; +http:\/\/www.google.com\/bot.html)";
    $spider_user_agent[3] = "msnbot\/1.0 (http:\/\/search.msn.com\/msnbot.htm)";

    for (
    $i 1$i <= $spider_search_engine_n$i++) 

        if (
    preg_match("/".$spider_user_agent[$i]."/i"$sys)) 
        {
            
    $spider_search_engine_ctr=1;
        }
    }

    if (
    $spider_search_engine_ctr!=1)
    {
        echo 
    "non è un bot";
    }
    else
    {
        echo 
    "bot";
    }
    ?>
    purtroppo il forum mi rimaschera gli slash cmq intendevo così:

    $spider_user_agent[1] = "Mozilla\/5.0 (compatible; Yahoo! Slurp; http:\/\/help.yahoo.com\/help\/us\/ysearch\/slurp)";
    $spider_user_agent[2] = "Mozilla\/5.0 (compatible; Googlebot\/2.1; +http:\/\/www.google.com\/bot.html)";
    $spider_user_agent[3] = "msnbot\/1.0 (http:\/\/search.msn.com\/msnbot.htm)";

  10. #10
    Ho modificato, a breve saprò se va oppure no.
    Solo una cosa: hai detto di mascherare il "+" ma come faccio? Non mi pare tu abbia modificato quel punto... Toglierlo non posso, perchè fa parte del reale $user_agent dello spider...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.