Récupérer du code d'une page html

[Résolu]
Signaler
Messages postés
31
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
26 juillet 2007
-
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
-
Salut ! [;)]


Bon, j'explique mon problème : j'ai fait un script qui gere des templates et génére des pages html statiques.

Par exemple, le template est :
<html>
<head>
{head}
</head>

Pourquoi pas un titre?

{body}

</html>


Et je remplace {head} et {body} par des valeurs et je génére la page statique.
Ensuite je veux pouvoir récupérer ce qu'est {head} et {body} dans une page déja générée... le problème c'est que le template peut changer (il peut y avoir des trucs fixes du genre le titre h1 que j'ai mis)
Donc ma question est : comment récupérer ces valeurs
Note : j'ai toujours le template de base, donc peut etre faire une comparaison... mais je sais pas comment faire xD

Merci
MeTaLdArK

17 réponses

Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
Salut,

Tu y arriveras facilement grâce à un subtile jeu de strpos, strrpos et substr...

Bonne chance
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
Bravo...

Une dernière aide pour la route :

<?php
$temps_debut = microtime(true);

$file = file_get_contents("index.html");

$pos1 = strpos($file, "<!--content-->") + strlen('<!--content-->');
$pos2 = strpos($file, "<!--/content-->");
$rest = substr($file, $pos1, $pos2-$pos1);
echo $rest;

$temps_fin = microtime(true);
echo 'Temps d\'execution : '.round($temps_fin - $temps_debut, 4);
?>
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
hihi...

Ben, tu fais un template dans le template du template :

remplace
{body}
par
<!--body-->
... ton texte de template ici ...
<!--/body-->

comme ça, tu pourras (peut-être) retrouver le texte de remplacement...

A+
Messages postés
31
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
26 juillet 2007

C'est en effet une solution possible...
Il y en a t il d'autre ?!
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
Salut,

c'est la meilleur solution... sinon, tu peux faire du parsing, mais c'est lourd...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
31
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
26 juillet 2007

Bon d'acoord...
Comment je récupere le texte qu'il y a entre <!--body--> et <!--/body--> ?

Merci :)
Messages postés
31
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
26 juillet 2007

Génial !
Je connaissais pas substr :)
Messages postés
31
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
26 juillet 2007

J'ai parlé trop vite...
Avec ce code :
<?php
$temps_debut = microtime(true);

$fp = fopen("index.htm","r");
while (!feof($fp)) { $file = fread($fp, 100000); }
fclose($fp);
$pos1 = strpos($file, "<!--content-->");
$pos2 = strpos($file, "<!--/content-->");
$rest = substr($file, $pos1, $pos2);
echo $rest;

$temps_fin = microtime(true);
echo 'Temps d\'execution : '.round($temps_fin - $temps_debut, 4);
?>

$rest me retourne le contenu du fichier à partir de <!--content--> mais sans s'arrêter à <!--/content--> (il va jusqu'à la fin)

pourquoi?
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
Et pourtant... C'est la base.

"Vieux motard que jaimais"

A+
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
Messages postés
31
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
26 juillet 2007

MDR !
En effet, le trosieme parametre est la longueur et pas la position d'arrêt...
Avec ceci sa marche impec :
<?php
$temps_debut = microtime(true);

$fp = fopen("index.htm","r");
while (!feof($fp)) { $file = fread($fp, 100000); }
fclose($fp);
$pos1 = strpos($file, "<!--content-->");
$pos2 = strpos($file, "<!--/content-->");
$rest = substr($file, $pos1, $pos2-$pos1);
echo $rest;

$temps_fin = microtime(true);
echo 'Temps d\'execution : '.round($temps_fin - $temps_debut, 4);
?>


Merci ;)
Messages postés
31
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
26 juillet 2007

$file = file_get_contents("index.html"); => d'accord c'est plus simple, lisible, efficace :)

$pos1 = strpos($file, "<!--content-->") + strlen('<!--content-->'); je comprend pa s l'intérêt de cet ajout... d'autant plus que avec ou sans sa me sort la même chose :o
Messages postés
31
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
26 juillet 2007

Ah mais oui que suis je bête...
Sans l'ajout on récupere avec le commentaire html :d

Bon je ne vous embete plus :)
Merci à toi J_G ;)
Messages postés
71
Date d'inscription
jeudi 18 novembre 2004
Statut
Membre
Dernière intervention
12 août 2006

Tu as aussi la solution suivante:
$rest = preg_replace('`(.+?)\<!--content-->(.+?)\<!--/content-->(.+?)`si', '$2', $file )
++
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
Salut,

je ne suis pas persuadé du bon fonctionnement de cette expression régulière...
$rest = preg_replace('`(.+?)\<!--content-->(.+?)\<!--/content-->(.+?)`si', '$2', $file )

pour les raisons suivantes :
* il manque un ^ au début pour signifier "depuis le début de la chaine"
* idem avec un $ à la fin
* '+?' ...? Tu voulais dire '*'
* Pourquoi un \ devant les <!-- ?
* '$2', peut-être mieux avec '\2'

Donc j'opterais plutot pour :
$rest = preg_replace('`^.*<!--content-->(.*)<!--/content-->.*$`si', '\1', $file )

Sinon, effectivement ça peut marcher et effectivement, c'est bien de montrer qu'il y a toujours plusieurs méthodes pour arriver au même résultat.

Mais, même si c'est élégant de faire tenir cette opération en un ligne, je trouve surdimensionner l'utilisation d'expression régulière et, surtout, du remplacement pour une telle opération. La méthode des substr-strpos-strlen est à coup sûr beaucoup plus rapide à l'exécution...

A+
Messages postés
71
Date d'inscription
jeudi 18 novembre 2004
Statut
Membre
Dernière intervention
12 août 2006

C'est ce que je m'étais dit aussi, mais bon, certains préférent les REGEX, on sait pas pourquoi :p
@+
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
Ca fait riche ;)