Sjekke link med php

En tråd i 'PHP, SQL og databaser' startet av kongen, 25 Apr 2014.

  1. kongen

    kongen kongemedlem

    Innlegg:
    2.748
    Er det mulig å sjekke om en link eksisterer med php?

    Hvis jeg vil søke gjennom og finne alle linkene på siden min som går til vg.no/aktuelt.html, hvordan måtte php-koden sett ut?
     
  2. spikre

    spikre peterhamre.no

    Innlegg:
    1.308
    Vil du telle antall lenker ==, vise hvilket radnummer i PHP-filen, eller noe annet?

    Forøvrig spør du "Er det mulig å sjekke om en link eksisterer" (..) Mener du lenke med en <a href> og/eller javascript.open eller URL-adressen?
     
  3. adeneo

    adeneo Medlem

    Innlegg:
    1.611
    PHP:
    $url 'http://vg.no/aktuelt.html';

    $curl curl_init($url);
    curl_setopt($curl,  CURLOPT_RETURNTRANSFERTRUE);
    $response curl_exec($curl);
    $code curl_getinfo($curlCURLINFO_HTTP_CODE);

    if(
    $code == 404) {
        
    // lenken eksisterer ikke
    }

    curl_close($curl);
     
  4. spikre

    spikre peterhamre.no

    Innlegg:
    1.308
    Det kan da umulig være dette han spør om? Denne snutten sjekker ikke om LENKEN eksisterer, men om FILEN eksisterer.
     
  5. adeneo

    adeneo Medlem

    Innlegg:
    1.611
    Ehm, nei, du har nok rett. Det er meg som ikke kan lese.

    Jeg antok at man ønsket å sjekke om lenken var gyldig, da høres noe unormalt ut å bruke PHP til å finne alle lenker til et gitt domene på sine egne nettsider ?
     
    Sist redigert: 25 Apr 2014
  6. kongen

    kongen kongemedlem

    Innlegg:
    2.748
    Jeg mener at en link med <a href> faktisk eksisterer og at den ikke inneholder "nofollow". Javascript.open skal ikke gi gyldig link.

    F.eks. hvis jeg har $url = 'vg.no/aktuelt.html' så vil jeg finne ut om det eksisterer en gyldig link fra en spesifikk side $url2 = 'minside.no/topp.html' eventuelt fra hele nettstedet $site = 'minside.no' til $url = 'vg.no/aktuelt.html'.

    Trenger ikke å telle antall linker eller vise hvilket radnummer linken er på, kun om det eksisterer en gyldig link eller ikke.
     
  7. spikre

    spikre peterhamre.no

    Innlegg:
    1.308
    Enig.
     
  8. adeneo

    adeneo Medlem

    Innlegg:
    1.611
    Og hvordan finner du den siden, og eventuelt parser den siden slik den ville fremstått i nettleseren din med PHP.
     
  9. kongen

    kongen kongemedlem

    Innlegg:
    2.748
    $url / $url2 / $site legges manuelt inn i koden eller legges inn i koden via skjemafelt.

    Koden skal bare sjekke: gyldig link eksisterer / gyldig link eksisterer ikke, mellom 2 oppgitte urler.
     
  10. adeneo

    adeneo Medlem

    Innlegg:
    1.611
  11. kongen

    kongen kongemedlem

    Innlegg:
    2.748
    Haha, tok du bilde av tastaturet ditt nå :eek:

    Det er ikke jeg som skal legge inn linkene, men koden skal sjekke om det eksisterer linker. Ikke bare fra min side. Koden skal også kunne sjekke; er det en lenke fra vg.no/aktuelt.html til dagbladet.no/uaktuelt.html (ja/nei). Er det en lenke fra en hvilken-som-helst-side fra vg.no til dagbladet.no/uaktuelt.html (ja/nei).
     
  12. adeneo

    adeneo Medlem

    Innlegg:
    1.611
    Er ikke helt sikkert på om jeg skjønner dette, men du kan fortsatt bruke cURL til å hente en nettside, og så bruke en parser til å finne anchor elementer som matcher visse kriterier

    PHP:
    $url 'http://www.nettside.no'

    $curl curl_init($url); 
    curl_setopt($curl,  CURLOPT_RETURNTRANSFERTRUE); 
    $response curl_exec($curl);
    curl_close($curl);

    $dom = new DOMDocument;
    $dom->loadHTML($response);

    foreach (
    $dom->getElementsByTagName('a') as $node) {
        
    $url $node->getAttribute('href');

        if ( 
    $url === 'vg.no/aktuelt.html ' ) { // eller regex matching osv ?
            // Tada
        
    }
    }
     
  13. kongen

    kongen kongemedlem

    Innlegg:
    2.748
    Prøver denne koden nå, men den gir ikke "link eksisterer", selv om det går linker frem og tilbake mellom begge urlene.

    PHP:
    $url 'http://www.vg.no/forbruker/mat-og-drikke/mat/'

    $curl curl_init($url); 
    curl_setopt($curl,  CURLOPT_RETURNTRANSFERTRUE); 
    $response curl_exec($curl);
    curl_close($curl);

    $dom = new DOMDocument;
    $dom->loadHTML($response);

    foreach (
    $dom->getElementsByTagName('a') as $node) {
        
    $url2 $node->getAttribute('href');

        if ( 
    $url2 === 'http://www.vg.no/nyheter/innenriks/mat/norskproduserte-baer-er-ikke-norske/a/10122630/' ) { 
            echo 
    "link eksisterer";
        } else {
        echo 
    "link eksisterer ikke";

    }
     
  14. fabbz Medlem

    Innlegg:
    40
    Koden din virker til en viss grad. I eksemplet du viser til så blir akkurat den linken som du ønsker å sjekke etter lagt inn via JSON.

    Du skjønner hva jeg mener om du åpner kildekoden til Mat - VG og søker etter norskproduserte-baer-er-ikke-norske.

    Med curl henter du bare kildekoden, men javascript blir ikke parset og dermed vises ikke linken på samme måte som i nettleseren din.
     
  15. kongen

    kongen kongemedlem

    Innlegg:
    2.748
    Jeg får ikke koden til å virke med vanlige linker heller. Jeg får hverken "link eksisterer" eller "link eksisterer ikke". Bare en blank side.
     

Del denne siden