Comment detecter un lien dans une page distante

WRInaute passionné
Bonjour,

J'essaye de detecter un lien dans une page distante mais celui ci n'ai trouvé que si l'url est exacte.
Dans le code ci-dessous, seul le lien -http://monsite.com/annuaire/generaliste-p1-27.html alors que je souhaiterais également pouvoir détecter -http://monsite.com .
Code:
<?php 

$page_source = $res_infos['url_retour']; 
$lien_a_verifier = "http://monsite.com/annuaire/generaliste-p1-27.html"; 

 $fp=@fopen($page_source,"r"); 
 if($fp)  {  
   while(!feof($fp))  {  
   $chaine .= fgets($fp,1024);  
   }  
  }  

  $masque = '#href="(.*?)"#i'; 
  preg_match_all("$masque",$chaine,$out,PREG_SET_ORDER); 

 $i=-1; 
 $compte=0; 
 while ($i < count($out)) 
 { 
  $i++; 
  // affiche tous les elements du tableau 
  // vous pouvez decocher la ligne ci dessus pour avoir tous les elements du tableau 
   //echo $out[$i][1]; 
  if($out[$i][1] == $lien_a_verifier) $compte++; 
 } 
 if ($compte > 0 )  echo 'Le lien sur <a href="'.$page_source.'" target="_blank">'.$page_source.'</a> existe  '.$compte.' fois'; 
else
{
echo 'pas de lien trouvé sur '.$page_source.'';

}
?>
Toutes suggestions sont les bienvenues !
Merci
 
WRInaute passionné
Merci Jeviensderio mais je crains de ne pas avoir tout comprit ^^ !

J'ai une erreur:

Code:
Parse error: syntax error, unexpected '[' in /.....
J'ai donc remplacé la portion de code if($out[$i][1] == $lien_a_verifier) par:

Code:
if(srtncmp(out[$i][1],$lien_a_verifier, $x))
Puis
Code:
if(srtncmp(out[$i][1],$lien_a_verifier, $x));
et
Code:
if(srtncmp(out[$i][1],$lien_a_verifier, $x)) $compte++;

Je n'ai absolument pas comprit le "où $x est la taille de la chaine -http://www.monsite.com".
J'aurrais peut etre du préciser mon petit niveau php :lol:
Merci
 
WRInaute impliqué
L'erreur vient du fait qu'il manque le dollar devant le nom de la variable "out" -> $out

Mais après je n'ai pas compris ce que tu voulais faire donc peux pas t'aider plus désolé...
 
WRInaute passionné
Merci FloBaoti
Bon, j'ai tout de meme une erreur:
Code:
Fatal error: Call to undefined function srtncmp() in /home/..
..et sa me depasse :x !

En faite ce que je veux faire, c'est vérifier si le lien partenaire est bien présent ...
Code:
$page_source = $res_infos['url_retour'];
Correspond à l'url de la page ou mon lien est censé etre.
Code:
$lien_a_verifier = "http://monsite.com/annuaire/generaliste-p1-27.html";
Correspond à mon lien censé etre présent chez le partenaire.
En l'etat le code me retourne ok si l'url exacte dans la variable $lien_a_verifier est trouvé.
Je souhaiterais que le code me retourne également ok si $lien_a_verifier correspond à -http://monsite.com (sans /annuaire/generaliste-p1-27.html).
 
WRInaute passionné
si tous les liens sont dans ton tableau

tu peux verifier l'existence d'un element avec in_array

rog
 
WRInaute passionné
Leonick: J'ai éssayé et sa ne fonctionne pas.
rog: Je me suis documenté sur in_array et éssayé d'ajouter cette fonction à mon code mais sans succès :? .
Jeviensderio:Avec strncmp je n'ai plus d'erreur mais sa ne fonctionne pas non plus.

Merci tout de meme.
 
WRInaute passionné
je presume que tu as fait un print_r du du buffer retourné par le preg_match_all pour effectuer une verification manuelle si ta chaine est bien dedans ?

rog
 
WRInaute passionné
rog a dit:
je presume que tu as fait un print_r du du buffer retourné par le preg_match_all pour effectuer une verification manuelle si ta chaine est bien dedans ?

rog

Faut pas présumer comme sa :lol: ! La, tu vient de me parler 100% extra terrestre.
Allez, direction www.manuelphp.com ...
 
WRInaute passionné
Essayer:

Code:
$x = strlen("http://www.nomdusite.com");

if(strncmp($out[$i][1],$lien_a_verifier, $x) == 0)  $compte++;


Vérifier avant que $out[$i][1] contient bien l'url.
Noter aussi que le $ avait disparu avant le out.
 
WRInaute passionné
me suis planté, le buffer n'est peut etre pas exploitable avec in_array

petite revision logique de ton script qui a l'air bien, mais si le but est de savoir si le lien existe et si l'on n'a pas besoin de savoir si il est répété, on peut le simplifier

<?php

$page_source = $res_infos['url_retour'];
$lien_a_verifier = "http://monsite.com/annuaire/generaliste-p1-27.html";

### on doit d'abord initialiser la variable avant de concatener
$chaine = '';

$fp=@fopen($page_source,"r");
if($fp) {
while(!feof($fp)) {
$chaine .= fgets($fp,1024);
}
}

$masque = '#href="(.*?)"#i';
preg_match_all("$masque",$chaine,$out,PREG_SET_ORDER);

### si il y a un match, il sera dans le premier element retourné, donc la boucle est inutile
### $out[0][0] doit donc contenir $chaine
### moi j'ai confiance en stristr

if(stristr($out[0][0],$lien_a_verifier) )
{
echo "Le lien sur <a href=$page_source target=_blank>$page_source</a> existe ";
}
else
{
echo 'pas de lien trouvé sur '.$page_source;

}
?>
 
WRInaute passionné
Bonjour,

rog, j'ai essayé ton code avec preg_match_all, je n'ai pas d'erreur mais le lien n'est pas détecté. J'ai donc tenté avec preg_match, meme punition avec cette erreur en plus:

Code:
Warning: preg_match() [function.preg-match]: Invalid flags specified in /home/....page.php on line 482
pas de lien trouvé sur http://www....

Jeviensderio, on ne touche plus à rien :D , sa fonctionne nickel.
Grand merci à vous :wink: .
 
WRInaute discret
Fonction allégée :

Code:
function DetectLink($url_needed, $target)
{
	if ( ($page_content = @file_get_contents($target)) == false )
		return false;

	
	if ( preg_match('!href=["\']'.$url_needed.'["\']!i', $page_content) == true )
		return true;
	else
		return false;
}
 
Nouveau WRInaute
rog a dit:
me suis planté, le buffer n'est peut etre pas exploitable avec in_array

petite revision logique de ton script qui a l'air bien, mais si le but est de savoir si le lien existe et si l'on n'a pas besoin de savoir si il est répété, on peut le simplifier

<?php

$page_source = $res_infos['url_retour'];
$lien_a_verifier = "http://monsite.com/annuaire/generaliste-p1-27.html";

### on doit d'abord initialiser la variable avant de concatener
$chaine = '';

$fp=@fopen($page_source,"r");
if($fp) {
while(!feof($fp)) {
$chaine .= fgets($fp,1024);
}
}

$masque = '#href="(.*?)"#i';
preg_match_all("$masque",$chaine,$out,PREG_SET_ORDER);

### si il y a un match, il sera dans le premier element retourné, donc la boucle est inutile
### $out[0][0] doit donc contenir $chaine
### moi j'ai confiance en stristr

if(stristr($out[0][0],$lien_a_verifier) )
{
echo "Le lien sur <a href=$page_source target=_blank>$page_source</a> existe ";
}
else
{
echo 'pas de lien trouvé sur '.$page_source;

}
?>


Bonjour rog,

je suis trèèèèèèèèèèèèèèèèèèèèèèèèèèèèès intérréssé (depuis des années ...c'est pour dire !) de vérifier la présence du lien retour de façon automatique sur mes annuaire. Je n'avais jamais rien trouvé jusque là ... mais ça a l'air intégrable sur un annuaire type categorizator ?

le soucis c'est que j'y connais (presque) rien en programmation et je voudrais savoir si c'est intégrable dans un formulaire d'un annuaire
http://eleveurmainecoon.free.fr/annuaire-maine-coon/submit_site.php?id_cat=0 ?

et ce qu'il faut modifier (bon je me doute qu'il faut créer un champ de formulaire nomé 'url_retour', remplacer le lien retour que je souhaite dans le code ... mais après je bloque.

J'espère qu'un connaisseur passera par là et pourra m'aider à intégrer ce bout de code .......que je cherche depuis 3 ans (c'est pas une blague !).

merci par avance.
 
WRInaute accro
tryan a dit:
Bonjour,

rog, j'ai essayé ton code avec preg_match_all, je n'ai pas d'erreur mais le lien n'est pas détecté. J'ai donc tenté avec preg_match, meme punition avec cette erreur en plus:

Code:
Warning: preg_match() [function.preg-match]: Invalid flags specified in /home/....page.php on line 482
pas de lien trouvé sur http://www....

Jeviensderio, on ne touche plus à rien :D , sa fonctionne nickel.
Grand merci à vous :wink: .

:D :D

ptite satisfaction perso ^^

http://www.phpsources.org/scripts290-PHP.htm
 
Discussions similaires
Haut