Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2616 connectés 

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°66544
Zapco
Posté le 20-10-2001 à 01:04:48  profilanswer
 

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

mood
Publicité
Posté le 20-10-2001 à 01:04:48  profilanswer
 

n°66573
omega2
Posté le 20-10-2001 à 15:46:16  profilanswer
 

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. ;)

n°66574
Zapco
Posté le 20-10-2001 à 15:52:35  profilanswer
 

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.

n°66576
speedyop
Posté le 20-10-2001 à 15:58:05  profilanswer
 

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

n°66715
Zapco
Posté le 21-10-2001 à 18:55:04  profilanswer
 

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?

n°66717
youdontcar​e
Posté le 21-10-2001 à 19:03:43  profilanswer
 

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.

n°66813
Zapco
Posté le 22-10-2001 à 10:53:58  profilanswer
 

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à.

n°66814
Zapco
Posté le 22-10-2001 à 10:56:08  profilanswer
 

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

n°66872
Zapco
Posté le 22-10-2001 à 15:25:10  profilanswer
 

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é


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

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

 

Sujets relatifs
[ PHP ] Formulaire + bdd[PHP] Gestion d'images ??
[PHP]combien coute une journee de dev?Caracteres speciaux dans chaine de caractere PHP
[php]Php et flash[PHP] problème avec la requête DELETE FROM.
[PHP]On pourrais m'expliker en detail les cookie et les seesions ...[PHP] probleme avec un webmail
[PHP] Upload image[PHP] Rassurer moi y'a une fonction pour l'heure dynamique
Plus de sujets relatifs à : [PHP] J'ai une colle, le premier qui trouve ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR