Lecture de fichier html sans chargement complet

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

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.