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

Résolu
cs_Metaldark Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 26 juillet 2007 - 20 juin 2006 à 18:14
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 - 22 juin 2006 à 19:13
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

J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
21 juin 2006 à 13:31
Salut,

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

Bonne chance
3
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
21 juin 2006 à 17:37
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);
?>
3
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
20 juin 2006 à 18:43
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+
0
cs_Metaldark Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 26 juillet 2007
20 juin 2006 à 18:59
C'est en effet une solution possible...
Il y en a t il d'autre ?!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
20 juin 2006 à 23:59
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)
0
cs_Metaldark Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 26 juillet 2007
21 juin 2006 à 12:02
Bon d'acoord...
Comment je récupere le texte qu'il y a entre <!--body--> et <!--/body--> ?

Merci :)
0
cs_Metaldark Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 26 juillet 2007
21 juin 2006 à 14:34
Génial !
Je connaissais pas substr :)
0
cs_Metaldark Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 26 juillet 2007
21 juin 2006 à 14:43
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?
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
21 juin 2006 à 14:48
Et pourtant... C'est la base.

"Vieux motard que jaimais"

A+
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
21 juin 2006 à 14:50
0
cs_Metaldark Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 26 juillet 2007
21 juin 2006 à 17:20
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 ;)
0
cs_Metaldark Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 26 juillet 2007
21 juin 2006 à 17:57
$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
0
cs_Metaldark Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 26 juillet 2007
21 juin 2006 à 18:04
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 ;)
0
momoxe Messages postés 71 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 12 août 2006
22 juin 2006 à 16:17
Tu as aussi la solution suivante:
$rest = preg_replace('`(.+?)\<!--content-->(.+?)\<!--/content-->(.+?)`si', '$2', $file )
++
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
22 juin 2006 à 17:19
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+
0
momoxe Messages postés 71 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 12 août 2006
22 juin 2006 à 18:14
C'est ce que je m'étais dit aussi, mais bon, certains préférent les REGEX, on sait pas pourquoi :p
@+
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
22 juin 2006 à 19:13
Ca fait riche ;)
0
Rejoignez-nous