Lecture de fichier html sans chargement complet

Soyez le premier à donner votre avis sur cette source.

Vue 3 721 fois - Téléchargée 149 fois

Description

Lecture d'un Tag (de la Structure globale ci-dessous) d'un fichier HTML sans le charger.Idéal pour un traitememt par lot de fichier et utile pour créer des fonctions personnalisées pour récupérer le titre,les metas tag,....
Opération réussie si début de Tag et fin de Tag trouvé sinon échec.

<!DOCTYPE ........ >
<HTML>
<HEAD>
<TITLE>Structure HTML</TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>

PS:Pour une démonstration globale du script , un lien est indiqué dans le zip

J'ai mis l'algorythme à la place des commentaires dans la source.Les instructions utilisées parlent d'elles mêmes.
Les commentaires dans le fichier ne sont pas pris en compte.

DEBUT
|
|Tampon de réception de donneés = vide
|Tampon de résultat = vide
|drap = faux
|
|Ouverture du fichier
|
|Repeter Tant Qu'il y a des données
|'
|' Tampon de réception <-- Lecture d'un paquet de données
|'
|' Si début de Tag encore non trouve (drap = faux) Alors
|' |Recherche du debit de Tag dans le Tampon de réception de donneés
|' |Si recherche positif Alors
|' ||
|' ||Initialisation du Tampon de réception à partir du début de Tag
|' ||Initialisation de drap à vrai pour début de tag trouvé
|' |Fsi
|' Fsi
|'
|' Si début de Tag trouvé (drap = vrai) Alors
|' |
|' |Recherche du fin de Tag
|' | Si fin de tag trouvé Alors
|' | |Extraction des donnés jusqu'au fin de Tag
|' | |Ajout du Tampon réception au Tampon de résultat
|' | |Fermeture du descripteur de fichier
|' | |Retour du Tampon de résultat
|' | |- Fin du script -
|' | Sinon
|' | | Ajout du Tampon réception au Tampon de résultat
|' | | et continuation du lecture des données
|' | Fsi
|' Fsi
|'
|FinRTQ
|
|***** Fin de fichier et Fin de Tag non trouvé
|***** Cas particuliers ou les derniers octets du Tampon de réception
|***** contient les premiers octets du fin de tag et que la recherche
|***** du tag n'a pas abouti.
|
|Recherche du fin de Tag dans le Tampon de résultat (début de Tag OK)
|Si Recherche positif Alors
||
||Tampon de résultat <-- Extraction des données jusqu'au fin de Tag
|Sinon
|| Mise à zéro du Tampon de résultat (fin de Tag non trouvé)
|Fsi
|
|Retour du Tampon de résultat
|
FIN

Source / Exemple :


<?php

/*----- GetTagHTML($urlsite,$startTag,$endTag) ------
Entrée : 
	 $urlsite - Adresse du fichier à lire
	 $starTag - Début de Tag ouvert  ex: <body 
	 $endTag  - Fin de Tag           ex: </body>
Sortie : Chaîne HTML                     
         ex: <body><h1>.......</h1></body>
         Le résultat peut être chargé par la fonction loadHTML pour un traitement personnalisé.  	 
------------------------------------------------------*/

function GetTagHTML($urlsite,$startTag,$endTag)
{
$strbuf = "";	//'Tampon de réception de donneés
$buffer = "";	//'Tampon de résultat
$strstartTag = ""; //'Recherche du début de Tag  
$handle = null;	//'Initialisation du descripteur de fichier
$drap = false;		//'Début de Tag non trouvé

$handle = @fopen($urlsite, "r");

if(!$handle)
 {echo "<br><br><center>...!...???...!...</center>"; return "";}

 while(!feof($handle))
  {   
   $strbuf = @fread($handle, 3072);
   if($drap == false)
     {
      $strstartTag = stristr($strbuf,$startTag);
       if($strstartTag)	
         {
          $strbuf = $strstartTag;
          $drap = true;
         }
     }
       if($drap)
         {				
	   $pos1 = stripos($strbuf,$endTag);
           if($pos1)
             { 			
              $strbuf =  substr($strbuf,0,$pos1 + strlen($endTag));
              $buffer .= $strbuf;
              fclose($handle);		
              return $buffer;			
             }
             else
                $buffer .= $strbuf;
        }		
  }
						
fclose($handle);

$pos2 = stripos($buffer,$endTag);

if($pos2 && $buffer)
 $buffer = substr($buffer,0,$pos2 + strlen(endTag) + 1 ) ;
else
 $buffer ="";

return $buffer;

}

$url = "http://www.singularite.info/";
$startTag = "<head";
$endTag =   "</head";

$strHTML = GetTagHTML($url,$startTag,$endTag);

echo '<pre>'.htmlspecialchars($strHTML).'</pre>';

?>

Conclusion :


Pour l'affichage du résultat l'encodage n'est pas traité.Par
défaut c'est de l'iso. Je suis débutant en php d'où les fonctions basiques.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

steweb57
Messages postés
6
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
19 avril 2009
-
Une petite question, comment fait tu si dans ton fichier html source tu trouve ce genre de code:

blablabla
test
lalala

Si tu fait $startTag = "<div id='id1'"; et $endTag = "</div"; je pense ca ne va pas marché !
Dans ton exemple la balise d'ouverture sera toujours la première trouvé dans le fichiers, et il faut que la balise de fermeture soit unique sinon c'est la première occurrence qui sera pris en compte.

Ce n'est donc pratique que pour récupérer des balises d'entête. Dommage que l'on ne puisse pas faire des recherches n'importe ou dans le document.
masternico
Messages postés
494
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
1 septembre 2011
-
jchan
Messages postés
7
Date d'inscription
samedi 14 avril 2007
Statut
Membre
Dernière intervention
13 avril 2009
-
Si on a des div imbriqués,c'est pas évident.
Utilise la fonction preg_match_all().

A partir du résultat:

$strHTML = GetTagHTML($url,$startTag,$endTag);

$pattern = '/<div(.*)/i';
preg_match_all($pattern, $strHTML, $tabTag);

for($i=0;$i<count($tabTag[0]);$i++)
{
echo htmlspecialchars($tabTag[0][$i])."

";
}
il faut tester si c'est fiable à 100%.

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.