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

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

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.