[PHP] J'ai une colle, le premier qui trouve ...

J'ai une colle, le premier qui trouve ... [PHP] - Programmation

Marsh Posté le 20-10-2001 à 01:04:48    

je désire transformer une page dynamique php en page statique html que je regénère à chaque modification de la page afin d'éviter de surcharger le servaur SQL.
J'utilise la page toto.php3 ayant le code suivant :
 
<?php
if(!($fichier_source = fopen("http://www.monsite.com/index.php3","r" )))
{
 echo "Probleme lors de l'ouverture d'un fichier";
 exit;
}
 
$ligne = "";
 
while(!feof($fichier_source))
{
 $HTML .= fgets($fichier_source,255);
}
 
if(!($fichier_destination = fopen("index.html","w" )))
{
 echo "Probleme lors de l'ouverture d'un fichier";
 exit;
}
 
fputs($fichier_destination, $HTML);
 
fclose($fichier_source);
fclose($fichier_destination);
?>
 
Ca marche si j'execute toto.php3 depuis un autre serveur que celui de www.monsite.com, mais si je place toto.php3 sur le même serveur ca marche pas ; j'ai l'erreur :
Transport endpoint is not connected in your script on line 2
 
 
Si je remplace http://www.monsite.com/index.php3 par index.php3 alors il n'interprète pas la page index.php3
 
Donc comment faire pour qu'une page sur le serveur de www.monsite.com interprète la page www.monsite.com/index.php3 et me sauvegarde le résultat dans index.html

Reply

Marsh Posté le 20-10-2001 à 01:04:48   

Reply

Marsh Posté le 20-10-2001 à 15:46:16    

Je ne sais pas comment tu peux faire pour que le code marche sans passer par un autr serveur.
Voilà une méthode pour contourner le problème.
 
Sur ton serveur, tu garde tes pages index.html et toto.php3
Sur un aute serveur (multimania ou free ou un autre) tu met un fichier titi.php3
 
Toto.php3 va ouvrir le fichier à l'adresse autreserveur.fr/titi.php3 et va sauver le résultat dans ton fichier index.html
 
Le script titi.php3 va ouvrir ton script index.php3 et va redirigé le résultat vers sa sortie standard ( echo $HTML; ).
 
voilà, c'est pas LA solution mais c'est un moyen de contourner le problème. ;)

Reply

Marsh Posté le 20-10-2001 à 15:52:35    

merci, de ta contribution, c'est d'ailleur la seule solution que j'ai trouvé pour l'instant. Ca marche bien, mais j'aimerai trouver une solution avec un seul serveur, donc je continue à chercher.

Reply

Marsh Posté le 20-10-2001 à 15:58:05    

j'avis lu une methode de generatio nde page html assez bien sur zend.com qui consistait creer un repertoire de site dynamique genre www.monsite.com/dyn/ avec tout les fichiers dynamique.
Et dans l'arborescence nomrmal au debut aucun fichier n'est creer. le lien www.monsite.com/index.html point sur une page index/html qui n'existe pas encore, donc redirection sur la page 404, maintenant la plupar tdes hebergeurs permettent de personnaliser la page 404, donc tu met un script qui recupere la page demander et tu la genere a la volée pour le premier user, le fichier index.html est reellement créer au bon endroit pour les prochain qui l'appeleront et ne passeront pas par la page de 404, le probleme c'est que si le premier mec qui va voir une page et donc la genere arrete la page alors kel n'est pas finie la generatio nne sera pas complete... Va voir sur le site de zend pour plus de details... c'est une solution assez interessante et ingenieuse

Reply

Marsh Posté le 21-10-2001 à 18:55:04    

j'ai rien trouvé sur le site de Zend, et puis le problème c'est que le contennu de la page évoulue, donc ton truc marche pas.
personne à une astuce?

Reply

Marsh Posté le 21-10-2001 à 19:03:43    

au pire, tu peux regarder ob_start() & co. ces fonctions interceptent l'output du script et le redirigent sur une chaîne de caractères plutôt que vers le navigateur.
 
tu rajoutes un start() au début de ta page, un end() à la fin, tu créés un fichier, écrit la string dedans, et hop ...
 
ça impose de rajouter ça partout, et de faire f5 sur les pages concernées. pas top ...
 
sinon, à partir d'un serveur distant, utiliser les sockets ...  
 
ou encore, un aspirateur de site, et tu uploades le résultat sur ton site.

Reply

Marsh Posté le 22-10-2001 à 10:53:58    

effectivement les fonctions ob_start() & co marche, j'ai d'ailleur le script suivant qui marche impect :  
 
<?php
$fichier_source = "index.php3";
 
if(!($fichier_destination = fopen("toto.php3","w" )))
{
 echo "Probleme lors de l'ouverture d'un fichier";
 exit;
}
 
ob_start();
include("$fichier_source" );  
$HTML = ob_get_contents();
ob_end_clean();  
 
fputs($fichier_destination, $HTML);
fclose($fichier_destination);
 
echo "fichier généré";
?>
 
Le Pb c'est que c'est du PHP4 et pas du PHP3 comme sur le serveur où je suis herbergé, donc le Pb est toujours là.

Reply

Marsh Posté le 22-10-2001 à 10:56:08    

d'ailleur y a pas besoin de toucher à index.php3, il suffit juste de lancer le script.

Reply

Marsh Posté le 22-10-2001 à 15:25:10    

Pour ceux que ca interesse, voici comment générer un fichier static à partir d'un fichier dynamic en PHP3 avec un seul serveur :
 
<?php
$fichier_source = "index.php3";
$fichier_destination = "toto.php3";
 
//recupération du contenu du fichier source
$php_source = " ".implode("", file($fichier_source));  
 
//recherche des balise d'ouverture php
$pos_debut[0] = 0;
for ($i=0; strpos($php_source, '<?php', $pos_debut[$i]+1); $i++)
{
 $pos_debut[$i+1] = strpos($php_source, '<?php', $pos_debut[$i]+1);
}
 
//recherche des balise de fermeture php
$pos_fin[0] = 0;
for ($i=0; strpos($php_source, '?>', $pos_fin[$i]+1); $i++)
{
 $pos_fin[$i+1] = strpos($php_source, '?>', $pos_fin[$i]+1);
}
 
//le nombre de balise d'ouverture doit être égal au nombre de balise de fermeture
if (sizeof($pos_debut)<>sizeof($pos_fin))
{
 echo "il manque une balise php";
 exit;
}
 
//contruction d'une chaine 100% PHP
$PHP="";
$fin = -2;
for($i=1; $i<sizeof($pos_debut); $i++)
{  
 $deb = $pos_debut[$i];
 //convertie les partie HTML du fichier source en php
 $PHP .= 'echo "' . addslashes(substr($php_source, $fin+2, $deb-$fin-2)) . '";';
 
 //ajoute les parties php sans les balises
 $fin = $pos_fin[$i];
 $PHP .= substr($php_source, $deb+6 , $fin-$deb-6);
}  
 
//on remplace les echo par une chaine de caractère qu'on initialise
$PHP = '$HTML="";' . str_replace("echo", '$HTML .= ', $PHP);
 
//on execute la chaine $PHP
eval($PHP);
 
//on ouvre et on remplie le fichier de destination et on le ferme
if(!($fichier_destination = fopen($fichier_destination,"w" )))
{
 echo "Probleme lors de l'ouverture d'un fichier";
 exit;
}
fputs($fichier_destination, $HTML);
fclose($fichier_destination);
 
echo "fichier généré";
?>
 
Merci à tous ceux qui m'ont aidé

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed