Php Check BackLink Function

This article has been written before more than 24months, information might old.

Am vrut sa scriu un plugin pentru wordpress cu astfel de functie numai ca astfel de script nu functioneaza bine fara cron , wordpress are integrat un fel de cron , dar evident ca nu este crontab-ul de pe *nix si se bazeaza pe accesarea de catre vizitatori iar astfel de metoda nu este indicata pentru ca o executie care implica verificarea sa spunem a 100 de webiste-uri poate dura si peste 100 de secunde iar vizitatorul acela la care se va executa procedura ramane blocat ( in cazul in care evident script-ul seteaza o limita de executie mai mare decat implicit 30 secunde ) .

In fine dar daca am folosi crontab-ul cu un astfel de script ar fi perfect am scris 4 functii asemanatoare .
Toate fac acelasi lucru numai ca sunt un pic diferite , se putea scrie si a 5 metoda folosind socket-urile dar nu este o metoda recomanda pentru ca socket-urile sunt mai mult intentionate pe comunicare decat pe citirea continutului unui website .

La toate functiile se folosesc 2 parametrii :

  1. Primul parametru adresa completa site-ului care il verificam gen : ( http://azrael-sub7.ro/ )
  2. Al doilea parametru este link-ul pe care il cautam sub forma doar de domeniu ( tld ) gen ( azrael-sub7.ro ) important este sa nu existe http:// , caci altfel va returna FALSE indiferent daca exista link-ul sau nu .
  3. Functia intoarce TRUE sau FALSE ( daca link-ul a fost gasit sau nu pe pagina )

1 Metoda cu get_contents :

function ChkBkLinkGetCon($url , $yl){
 $c = file_get_contents($url);
 if($c==FALSE) return FALSE;
 $pm = preg_match_all("/<a&#91;^>]*".$yl."[^>]*>/",$c,$arr);
 if($pm==FALSE) return FALSE;
 if($pm>0)return TRUE;return FALSE;
}

2 Metoda cu Curl :

function ChkBkLinkCurl($url , $yl)
{
 $ch = curl_init();
 if($ch==FALSE) return FALSE;
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
 $c = curl_exec($ch);
 curl_close($ch);
 if($c == '') return FALSE;
 $pm = preg_match_all("/<a&#91;^>]*".$yl."[^>]*>/",$c,$arr);
 if($pm==FLASE) return FALSE;
 if($pm>0)return TRUE;return FALSE;
}

3 Metoda cu Fopen (php < 5) :

function ChkBackLinkFO4( $url , $yl ){
  $fhandle = fopen( $url , "rb");
  if(isset($fhandle)){
  if($fhandle == FALSE) return FALSE;
  $c = '';
  while(!feof($fhandle)){
  $c .= fread($fhandle, 1024);
  } fclose($fhandle);
  if($c=='') return FALSE;
  $pm = preg_match_all("/<a&#91;^>]*".$yl."[^>]*>/",$c,$arr);
  if($pm==FLASE) return FALSE;
  if($pm>0)return TRUE;return FALSE;}
  return FALSE;}

4 Metoda cu Fopen (php >= 5) :

  function ChkBackLinkFO5( $url , $yl ){
  $fhandle = fopen( $url , "rb");
  if(isset($fhandle)){
  if($fhandle == FALSE) return FALSE;
  $c = stream_get_contents($fhandle);
  fclose($fhandle);
  if(!isset($c)) return FALSE;
  if($c=='') return FALSE;
  $pm = preg_match_all("/<a&#91;^>]*".$yl."[^>]*>/",$c,$arr);
  if($pm==FLASE) return FALSE;
  if($pm>0)return TRUE;return FALSE;
  }return FALSE;}

Am facut si un benchmark (verificare performanta ) :

Rezultatele fiind :

  1. ChkBackLinkFO4(„http://fireflight.wordpress.com/”,”azrael-sub7.ro”) returnS TRUE – > Function Execution Time: 1.27 seconds
  2. ChkBackLinkFO5(„http://fireflight.wordpress.com/”,”azrael-sub7.ro”) returnS TRUE – > Function Execution Time: 1.419 seconds
  3. ChkBkLinkCurl(„http://fireflight.wordpress.com/”,”azrael-sub7.ro”) returnS TRUE – > Function Execution Time: 1.283 seconds
  4. ChkBkLinkGetCon(„http://fireflight.wordpress.com/”,”azrael-sub7.ro”) returnS TRUE – > Function Execution Time: 1.459 seconds

Alternativ puteti descarca fisierul php care contine functile si testarea lor de :
aici

Share the joy

Leave a Reply