Verifier si un lien (ou une chaine de caracteres) est present dans le contenu d'un site.

Soyez le premier à donner votre avis sur cette source.

Vue 6 190 fois - Téléchargée 195 fois

Description

Bonjour, je suis nouveau sur ce site et c'est la première fois que je poste une source ...
Fonction permettant de vérifier la présence d'un lien (pour mon utilisation) ou d'une chaîne de caractères sur l'ensemble des pages d'un site.

Source / Exemple :


<?php

// Function permettant de verifier l'existance d'un lien retour situé sur une page accesible depuis la page d'acceuil 
// d'un nom de domaine precis
// $page_source = le nom de domaine sur lequel on souhaite effectué la rechercher ex:"http://nomdusite.com"
// $lien_a_verifier = le lien ou la chaine de caracteres a recherché ex:"nomdusite.com" 

function check_lien_retour($page_source,$lien_a_verifier)
{
	//Chargement du contenu de la page dans une variable
	$page = file_get_contents($page_source);
	
	//Recherche une chaine terminant par: .htm ou .html ou .php ou .asp ou .aspx
	// et ne contenant que des caracteres autorisé dans une url
	
	$regex = '#';
	$regex .='[\+%\/a-z0-9._-]+\.php'; // pour l'extention php
	$regex .='|[\+%\/a-z0-9._-]+\.html'; // pour l'extention html
	$regex .='|[\+%\/a-z0-9._-]+\.aspx'; // pour l'extention aspx
	$regex .= '#i';

	
	preg_match_all($regex,$page,$resultat,PREG_PATTERN_ORDER);
	
	// creation du regex de la chaine a verifier
	$lien_a_verifier="#".$lien_a_verifier."#i";
	
	// Affiche les liens situé sur la page d'acceuil vers d'autre pages
	 echo '<textarea rows="20" cols="50" >';
	 print_r($resultat);
	 echo '</textarea><br/>';

	//Listage des liens trouvés
	foreach ($resultat[0] as $liens) 
		{
			// Donne l'URL exacte de la page a verifier
			$liens=$page_source."/".$liens;
			//echo $liens."<br/>";
			// Verifie l'existence d'une chaine de caracteres comprenant le lien a verifier
			$page0 = implode("", file($liens));
			
			
			if(preg_match($lien_a_verifier ,$page0))
				{ 
					// Si la chaine existe
					$url_presente=true;
					$url_page_du_liens = $liens;
				} 
			
			
		}
	if($url_presente==true)
				{ 
					echo 'lien présent sur le site: <a href="'.$page_source.'" target="_blank">'.$page_source.'</a> sur cette page: <a href="'.$url_page_du_liens.'" target="_blank">'.$url_page_du_liens.'</a><br/>'; 
				} 
			else 
				{ 
					echo 'lien absent sur le site: <a href="'.$page_source.'" target="_blank">'.$page_source.'</a><br/>'; 
				}

}// Fin de la function

Conclusion :


N'hésitez pas a me donner des conseils pour améliorer ce script qui est, je pense, loin d'être parfait.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
17
Date d'inscription
dimanche 30 septembre 2007
Statut
Membre
Dernière intervention
26 février 2009

Bonjour LaurentKOogar, je viens de voir ton message ... De ce que je viens de voir sur google curl() est une fonction permettant de vérifier si une url est en ligne, c'est ça ???
Mais je viens de découvrir que mon script a des limites (de très grandes limites :-( ), pour le moment il ne prend pas en compte les url composées (comme par exemple /blabla.php?lg=fr&...)
En plus je n'ai pas encore réussi a faire la liste des liens contenue sur une autre page que la page d'accueil ...
Mais ça va venir, enfin j'espère.
Avez vous une idée de toutes les extension d'une page (pouvant être lu par un navigateur) possible ???
Merci encore de votre aide.
Giloum.
Messages postés
369
Date d'inscription
samedi 4 septembre 2004
Statut
Membre
Dernière intervention
20 octobre 2013

faudrais commencer par verifier si la page est en ligne, curl est ton ami :)
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Salut,

Moi j'ai pour habitude de ne pas noter...
Mais j'ai quelque chose à dire ^^

Ligne 22 tu utilises ereg() : c'est dommage, parce que preg_match() est beaucoup plus performant à motif équivalent. C'est d'autant plus 'important' que tu l'utilises dans une boucle et que tu ne sais pas combien de fois elle va être exécutée.
Et même, pour aller encore plus vite, comme tu veux juste vérifier la présence d'une simple chaîne de caractère dans une autre, l'utilisation de strpos() serait encore plus judicieuse.

Autre petit truc : tu utilises une variable $url_presente, qui n'est pas définie si le lien n'a pas été trouvé. PHP déclenchera une erreur de type notice, qui s'affichera si error_reporting() n'est pas à 0. Et au lieu d'utiliser une chaîne dans la variable, autant utiliser un booléen (true/false), dont c'est justement l'utilité ici (un peu plus performant, surtout si le test est effectué avec === ).

Bon ce ne sont que des détails qui ne remettent pas en question la méthode ;)
Messages postés
276
Date d'inscription
dimanche 22 juillet 2001
Statut
Modérateur
Dernière intervention
5 décembre 2013

Salut giloum,

Puisque tu est nouveau je te souhaite la bienvenue sur PHPCS :)

Ta source est très utile et je t'encourage à continuer sur la voie du partage.

Bonne prog à toi,
akh

PS : J'ai noté 10 pour t'encourager et aussi car y'à rien à dire (critique) sur ta source. Bonne continuation

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.