Verification de validité de tout les liens hypertext dans un site

Soyez le premier à donner votre avis sur cette source.

Vue 3 900 fois - Téléchargée 256 fois

Description

Ce code se pose a la racine du site. Une fois executé il scanne l'arboresence du site et affiche vos dossier et fichier. En clickant sur la droite du nom de fichier, il y aura un scannage de vos script php et un teste de validité sur vos lien qui i figure. En théorie ce code et fiable (je l'ai écrit et tésté juste pour le site que j'entretien, mais j'ai essaye de le rendre le plus générique posssible...).Aussi c'est le premier code que je post et je ne sais pas vraiment si il a sa place au niveau d'initié, en même temps je pense que ce n'est pas un code qu'aura crée un débutant, donc je l'ai mis niveau deux...
A bientot les gens.

Source / Exemple :


page principale:
<?php
	echo("<html> 
		<head> 
		<title></title> 	
		<iframe src='chk_lien_affiche.php' align='right' height='100%' width='50%' name='affiche' frameborder=no></iframe>");
	function decalage($chemin)
	{
		$tab=explode("/",$chemin);
		$chem=$tab[sizeof($tab)-1];
		$tab[sizeof($tab)-1]="";
		$s=implode("/",$tab);
		$espace="";
		for($i=0;$i<sizeof($tab);$i++)
		{
			$espace=$espace."&nbsp;&nbsp;&nbsp;";
		}
		$espace="\n".$espace;
		$tab[0]=$chem;
		$tab[1]=$espace;
		return $tab;
	}	
	function scan_dossier($chemin)
	{
		$ide=microtime();
		$id=str_replace(chr(32),"3",$ide);
		$id=str_replace(".","3",$id);
		$dir=opendir($chemin);
		echo("<script>
		function affiche_dossier$id()
		{
 			if (dossier$id.style.display=='none'){
				 dossier$id.style.display='';
				 img_$id.src=\"explorer/petit_moins.gif\";
				 img2_$id.src=\"explorer/dir-open.gif\";
			} else {
				dossier$id.style.display='none';
				 img_$id.src=\"explorer/petit_plus.gif\";
				 img2_$id.src=\"explorer/dir-close.gif\";
			}
		}
		</script>");
		$tab=decalage($chemin);
		echo($tab[1]);
		echo("<A HREF='#$id' name=$id onClick=affiche_dossier$id()><img src=\"explorer/petit_plus.gif\" id=\"img_$id\" border=\"0\"><img src=\"explorer/dir-close.gif\" id=\"img2_$id\" border=\"0\"></A> &nbsp;$tab[0] ");
		echo("<A HREF='chk_lien_affiche.php?chem=$chemin' target='affiche'><img src=\"explorer/icon-acl.gif\" border=\"0\"></A><br>");
		echo("<DIV id='dossier$id' style=\"display:'none'\">");
		$nb_file=0;
		while ($file = readdir($dir))
		{
			if ($file != '.' && $file != '..')
			{
				if(is_dir($chemin."/".$file))
				{
					scan_dossier($chemin."/".$file);

				}
				else
				{
					$tab_file[$nb_file]=$file;
					$nb_file++;
				}
			}
		}
		$i=0;
		$tab=decalage($chemin);
		while($tab_file[$i])
		{
			echo($tab[1]);
			echo($tab[1]);
			echo("<img src=\"explorer/icon-acl.gif\">&nbsp;".$tab_file[$i]);
			echo("<br>");
			$i++;
		}
		echo("</DIV>");
	}
	scan_dossier(".");
?>
//////////////////////////////////////
iframe:
<?php
	function test_commentaire($s)
	{
		return eregi("^\/\/",$s);
	}
	function test_format($s)
	{
	//SAUT DE LIGNE FORMAT MAC=13/FORMAT UNIX/DOS=10
		$ascii=10;
		for($i=0;$i<500;$i++)
		{
			if(ord($s[$i])==13) $ascii=13;
		}
		return chr($ascii);
	}	
	function traite_chaine($chemin_parent,$s,$bool)
	{
		$nb=0;		
		if(eregi("(^[./])|(^[\"\'])",$s))//SI YA . OU / DANS LE NOM C UN LIEN ABSOLUE
		{
			$nb=1;
			$bool=eregi("^[./]",$s);
		}
		else if(eregi("^href\=",$s))
		{
			if(eregi("window.open(.{0,70})\.php",$s,$tab))
			{
				return traite_chaine($chemin_parent,$tab[0],$bool);
			}
			$nb=5;
		}
		else if(eregi("^action\=",$s))
		{
			$nb=7;
		}
		else if(eregi("(^doc_root\.)|(^location\:)",$s))
		{
			$nb=9;
		}
		else if(eregi("^window\.open",$s))
		{
			$nb=12;
		}
		else if(eregi("(^require)|(^include)",$s))
		{
			$nb=8;
		}
		if($nb!=0) return traite_chaine($chemin_parent,substr($s,$nb,strlen($s)),$bool);
		else
		{
			if($bool || eregi("^img",$s))
			{
				return $s;//CHEMIN ABSOLUE
			}
			else
			{
				return $chemin_parent."/".$s;//CHEMIN RELATIF
			}
		}
	}
	function scan_fichier($chemin_parent,$nom_fichier,$tab_total,$tab_erreur)
	{
		$ide=microtime();
		$id=str_replace(chr(32),"3",$ide);
		$id=str_replace(".","3",$id);
		/////////////different type de lien a ajouter.../////
		$chaine[0]="location\:\/(.{0,50})\.php";
		$chaine[1]="href\=(.{0,40})\.php";
		$chaine[2]="img\/(.{0,40})gif";
		$chaine[3]="require\(\"(.{0,50})\.php";
		$chaine[4]="include\(\"(.{0,50})\.php";
		$chaine[5]="href\=(.{0,50})\.inc";
		$chaine[6]="href\=(.{0,50})\.css";
		$chaine[7]="action\=(.{0,50})\.php";
		$chaine[8]="doc_root\.(.{0,50})\.php";
		$chaine[9]="window.open(.{0,70})\.php";
		$chaine[10]="href\=(.{0,70})\.pdf";
		$chaine[11]="href\=(.{0,40})\.html";
		$chaine[12]="href\=(.{0,40})\.htm";
		///////////////////////////////////
		echo("<img src=\"explorer/icon-banner-stored.gif\">&nbsp;<b>".$nom_fichier."</b>");	
		echo("<br>");
		$tab_total[0]=$nom_fichier;
		$tab_erreur[0]=$nom_fichier;
		$f=fopen($chemin_parent."/".$nom_fichier,"r");
		$contenu=fread($f,filesize($chemin_parent."/".$nom_fichier));
		$tableau=explode(test_format($contenu),$contenu);
		$nb_total=0;
		$nb_erreur=0;
		$lien=false;
		for($i=0;$i<sizeof($tableau);$i++)
		{
			if(!test_commentaire($tableau[$i]))
			{			
				for($j=0;$j<sizeof($chaine);$j++)
				{
					if (eregi($chaine[$j],$tableau[$i],$tab))
					{				
						$chaine_lien=traite_chaine($chemin_parent,$tab[0],false);
						$file = @fopen($chaine_lien,'r'); 
						if (!$file) 
						{						
							$tab_erreur[++$nb_erreur]=$chaine_lien;
						}
						$tab_total[++$nb_total]=$chaine_lien;
					}
				}
			}
		}
		//////////////////JAVASCRIPT/////////////////////////////////////////////////////
		echo("<script>
		function affiche_lien_total$id()
		{
 			if (lien_total$id.style.display=='none') lien_total$id.style.display='';
  			else lien_total$id.style.display='none';
		}
		function affiche_lien_erreur$id()
		{
 		 if (lien_erreur$id.style.display=='none') lien_erreur$id.style.display='';
  		 else lien_erreur$id.style.display='none';
		}
		</script>");
		////////////////////////////////////////////////////////////////////////////////
		$lien_valide=(sizeof($tab_total)-1)-(sizeof($tab_erreur)-1);
		echo("<A HREF='#$id' name=$id onClick=affiche_lien_total$id()><img src=\"explorer/icon-activate.gif\" border=\"0\"></A> Liens valides : ".$lien_valide." ");
		echo("<DIV id='lien_total$id' style=\"display:'none'\">");
		for ($i=1;$i<sizeof($tab_total);$i++)
		{
			echo($tab_total[$i]);
			echo("<br>");
		}
		echo("</DIV>");
		echo("<br>");
		echo("<A HREF='#$id' name=$id onClick=affiche_lien_erreur$id()><img src=\"explorer/icon-acl-add.gif\" border=\"0\"></A> Lien invalides: ".(sizeof($tab_erreur)-1)." ");
		echo("<DIV id='lien_erreur$id' style=\"display:'none'\">");
		for ($i=1;$i<sizeof($tab_erreur);$i++)
		{
			echo($tab_erreur[$i]);
			echo("<br>");
		}
		echo("</DIV>");
		echo("<hr>");
		echo("<br>");
		fclose($f);
	}	
	if($chem)
	{
		$dir=opendir($chem);
		while ($file = readdir($dir))
		{
			if ($file != '.' && $file != '..')
			{
				if(eregi("php",$file))
				{
					scan_fichier($chem,$file,$tab_total,$tab_erreur);
				}
			}
		}
	}
?>
///////////

Conclusion :


En reguardant le code vous verrez qu'on peut aisement ajouter des types de lien supplementaire. Il suffit de rajouter des caz dans le tableau de type de chaine.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
43
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 avril 2009

Bonjour,
Désolé, ça ne fonctionne pas.
J'ai installé à la racine de mon site et je lance dans un menu "verif_lien.php".
Je n'ai que l'arborescence des fichiers de ce script et pas celle du reste du site.
Cordialement.
.

explorer

dir-close.gif
dir-open.gif
icon-acl-add.gif
icon-acl.gif
icon-activate.gif
icon-banner-stored.gif
icon-campaign-d.gif
icon-campaign.gif
petit_moins.gif
petit_plus.gif
Thumbs.db

chk_lien_affiche.php
verif_lien.php
Messages postés
6
Date d'inscription
dimanche 24 janvier 2010
Statut
Membre
Dernière intervention
21 juin 2004

Désolé de cette étourderie.
Je vais regarder si on peut le rendre compatible avec d'autres navigateurs. Je te tiens au courant bien sûr.
Messages postés
1
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
21 juin 2004

Personnellement je ne travaille qu'avec IE donc c sur qu'il est compatible, prend le zip pour le photo.... g mis le code juste pour ceux qui veule jete un coup d'oeil me si tu veu "l'installer" il fo prendre le zip. voila
Messages postés
6
Date d'inscription
dimanche 24 janvier 2010
Statut
Membre
Dernière intervention
21 juin 2004

Re bonjour,
effectivement avec IE on en a plus ; mais les icones d'action ont été oubliées... :
explorer/petit_plus.gif
explorer/dir-close.gif
explorer/icon-acl.gif
explorer/icon-banner-stored.gif
explorer/icon-activate.gif
explorer/icon-acl-add.gif
Je suppose que ce sont celles de l'Explorateur windows, ou du moins que l'on peut les utiliser comme telles ?
Messages postés
6
Date d'inscription
dimanche 24 janvier 2010
Statut
Membre
Dernière intervention
21 juin 2004

Bonjour,
j'ai installé 2 fichiers : l'un pour l'iframe et l'autre appelé dans le browser. j'obtiens la liste des fichiers, hiérarchisés correctement, mais rien d'autre. Ton code est il compatible avec autre chose que IE ? j'en doutes.
Afficher les 6 commentaires

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.