• User Attivo

    Problemi con strripos() per verificare la presenza di codice html in un altro sito

    Ciao a tutti,

    non ho trovato niente riguardo alla mia domanda. :rollo:

    Allora faccio in breve: ho pensato a creare un sistema di scambio link che, con la funzione strripos() di php, verifica se il codice del mio link/banner sta nella pagina del sito partner allo scambio link e in caso positivo mostri il link/banner.

    Questo è il codice che ho creato:

    [php]<?php
    $sito = "hp://sito.com/" // Sito partner allo scambio link
    $code = "<a href="h
    p://miosito.net/">...</a>"; // Codice del mio link/banner

    if(strripos($code, file_get_contents($sito)) === true) { echo "Il link sta"; } else { echo "Il link non sta"; }

    ?>[/php]

    Solo che mi dice sempre che il link non sta, ma con tutti i siti partner a me ho provato, ma dice sempre no 😞

    Come faccio a risolvere?

    Grazie,
    :gthi:


  • Moderatore

    Penso che sia una via sbagliata, in quanto ad ogni visualizzazione della tua pagina andresti a generare una visualizzazione della pagine dei siti partner.
    Dovresti prevedere la ricerca "una tantum" ogni giorno con una variabile o altro.


  • User Attivo

    Infatti hai ragione, utilizzerò i cron 😄 per verificarlo, però la via è sempre quella, solo che invece di far stampare a video "Il link sta" o "Il link non sta", lo lascierà nel database se sta (perché infatti uso il database) o lo cancellerà se non sta.

    Ma mi serve sempre la via per cercare il codice del mio scambio link, anche con formati diversi, tipo aggiunto l'attributo class al tag a, o messo prima target e poi href e viceversa, o metto qualche tag font davanti alla scritta, ecc...

    Come faccio?

    Grazie,
    :gthi:


  • ModSenior

    se quell oscript ti da problemi prova cosi:
    [php]
    <?php
    $sito = "hp://sito.com/" // Sito partner allo scambio link
    $code = "<a href="h
    p://miosito.net/">...</a>"; // Codice del mio link/banner

    if(stristr(file_get_contents($sito), $code) === true) { echo "Il link sta"; } else { echo "Il link non sta"; }

    ?>
    [/php]

    poi potresti verificare solo se trovi href="h**p://miosito.net/"


  • User Attivo

    Allora mi sono letto la documentazione ufficiale di stristr() però non ho capito una cosa, dà true anche con formati diversi, tipo aggiunto l'attributo class al tag a, o messo prima target e poi href e viceversa, o messo qualche tag font davanti alla scritta, ecc...?

    Grazie,
    :gthi:


  • ModSenior

    stristr cerca la parola esatta appunto ti dicevo di controllare solo href="tuosito" nella pagina


  • Bannato User Attivo

    strripos

    Returns the numerical position of the last occurence of    *needle* . Also note that string positions start at 0,    and not 1.   
       If *needle*  is not found, **FALSE** is returned.
    

    Se trovi la stringa ti ritorna un numero e non mi pare che "true === a un numero qualsiasi".
    Prova col testare "=== false" che è invece un valore di ritorno contemplato dalla funzione.


  • User Attivo

    @Thedarkita said:

    stristr cerca la parola esatta appunto ti dicevo di controllare solo href="tuosito" nella pagina

    E per fare come ho chiesto io nel post 5 che funzione devo usare?

    Grazie,
    :gthi:


  • ModSenior

    penso devi usare qualche espressione regolare.. ma in quelle sono poco ferrato quindi attendiamo qualcuno più preparato per eventuali consigli 😄


  • Bannato User Attivo

  • User Attivo

    Aspetta, non ho capito 😄

    ho visto questo:

    [html]/<a\s[^>]href=("??)(http[^" >]?)\1[^>]>(.)</a>/siU[/html]

    Ma non ho capito come imposto il contenuto di href e la parola "Il mio sito"

    Come faccio?

    Grazie,
    :gthi:


  • Bannato User Attivo

    [php]
    $url = "example.net/somepage.html";
    $input = @file_get_contents($url) or die('Could not access file: $url');
    $regexp = "<a\s[^>]href=("??)([^" >]?)\1[^>]>(.)</a>";
    if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) {
    foreach($matches as $match) {
    if($match[2]=='TUOLINK') {
    $risposta = "l'hai trovato";
    }
    }
    }

    [/php]

    ci hai provato... metti la birra in frigo!:sbav:


  • User Attivo

    Aspetta 😄 non ho ancora tanto capito.

    [php]if($match[2]=='TUOLINK')[/php]

    Al posto di 'tuolink' devo mettere il link del mio sito, il nome del mio sito o il codice del link/banner?

    Grazie,
    :gthi:


  • Bannato User Attivo

    soffri di sdoppiamento della personalità? in certi post mi sembri più esperto in altri mi sembri un beginner 😄

    In $match[2] hai l'url del link trovato, in$match[3] hai il testo associato al link.
    con preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER) hai trovato tutti i link in pagina e ce l'hai in $matches, con il foreach li controlli uno per uno cercando quello che ha $match[2]=="all'url del tuo sito" e $match[3]=="al testo che hai chiesto venisse usato per il link".

    se rispondi "aspetta non ho ancora capito" ti declasso definitivamente al gruppo dei beginner.


  • User Attivo

    Scusa il disturbo, ma tu metti $match[1], 2, 3...

    Ma non è $matches che dovrebbe andare, dato che $matches è un array e $match no?

    Mi devi scusare ma io di php conosco poche cose ma quelle che conosco le conosco bene, ma qui non coosco niente 😞

    Grazie,
    :gthi: