problème avec la création d'un fichier php

problème avec la création d'un fichier php - PHP - Programmation

Marsh Posté le 27-07-2010 à 22:37:21    

bonjour,  
j'ai créer un petit script pour créer un fichier .php,
tout fonctionne parfaitement sauf que le fichier créer contient une erreur.
 
fichier formulaire :  

Citation :

<form method="post" action="create.php">
 
<p>
<input type="text" value="nom .php" name="name" /><i>mettez la date complète, l'heure et les minutes, ou bien votre pseudo.</i><br />
<input type="text" value="Pseudo" name="pseudo" /> <i>Pseudo de lesite.</i><br />
<input type="text" value="ID" name="id" /> <i>Ce que qui ce trouve à la fin du lien de votre profil.</i><br />
<input type="text" value="url images" name="picto" /><br />
<input type="submit" value="ok"><br />
</p>
 
</form>


 
 
fichier créate.php :
 

Citation :

<?php
 $name=$_POST['name'];
 $pseudo2=$_POST['pseudo'];
 $if2=$_POST['id'];
 $fond=$_POST['picto'];
 //$bordersize=$_POST['bordersize'];
 $ouverture = fopen("".$name."", "w" );
 fwrite($ouverture,'
 
 <?php
header ("Content-type: image/PNG" );
$bonhomme = "'.$fond.'";
$image = imagecreatefromPNG($bonhomme);
$file = file_get_contents("http://www.blablaland.com/site/membres.php?p=".$if2."" );
preg_match("`<!-- GETXP: (.*) -->`U", $file, $xp);
preg_match("`show_as=topics class="fofo_link_extern">(.*)</a>`isU", $file, $forum);
preg_match("`<div align="center"><strong>(.*)</strong>`isU", $file, $grade);
$login = "".$pseudo2."";
$xp1 = "".$xp[1]."";
$rank = "".$grade[1]."";
$post = ""$forum[1]."";
$pseudo = "".$login."";
$blanc = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 10, 210,35, $rank, $blanc);
imagestring($image, 10, 210,85, $post, $blanc);
imagestring($image, 10, 210, 130, $xp1, $blanc);
imagestring($image, 10, 200,170, $pseudo, $blanc);
imagePNG($image);
?>
 
');
 fclose($ouverture);
 echo ' ton image a bien été crée, tu peux y accédé ici : <a href="'.$name.'">'.$name.'</a> ';
 ?>


 
base du fichier :

Citation :

<?php
header ("Content-type: image/PNG" );
$bonhomme = "'.$fond.'";
$image = imagecreatefromPNG($bonhomme);
$file = file_get_contents("http://www.lesite.com/site/membres.php?p=".$if2."" );
preg_match("`<!-- GETXP: (.*) -->`U", $file, $xp);
preg_match("`show_as=topics class="fofo_link_extern">(.*)</a>`isU", $file, $forum);
preg_match("`<div align="center"><strong>(.*)</strong>`isU", $file, $grade);
$login = "".$pseudo2."";
$xp1 = "".$xp[1]."";
$rank = "".$grade[1]."";
$post = ""$forum[1]."";
$pseudo = "".$login."";
$blanc = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 10, 210,35, $rank, $blanc);
imagestring($image, 10, 210,85, $post, $blanc);
imagestring($image, 10, 210, 130, $xp1, $blanc);
imagestring($image, 10, 200,170, $pseudo, $blanc);
imagePNG($image);
?>


 
je ne vois pas ce qui cloche, pouvez vous m'aider pour mon problème ?
 
merci d'avance :)
 
j'ai modifier le nom du site par 'lesite" pour ne pas faire de pub.

Message cité 2 fois
Message édité par bnmkt le 29-07-2010 à 23:19:32
Reply

Marsh Posté le 27-07-2010 à 22:37:21   

Reply

Marsh Posté le 28-07-2010 à 09:08:12    

bnmkt a écrit :

bonjour,  
j'ai créer un petit script pour créer un fichier .php,
1> tout fonctionne parfaitement sauf que le fichier créer contient une erreur.
 
...
 
2> je ne vois pas ce qui cloche, pouvez vous m'aider pour mon problème ?
 
merci d'avance :)
 
j'ai modifier le nom du site par 'lesite" pour ne pas faire de pub.


 
1> Non, "tout" ne fonctionne pas "parfaitement", sinon tu ne serais pas là à nous dire qu'il y a un problème ...
 
2> Quel problème ? Tu n'expliques rien à ce qui est censé se passer exactement, et à ce qui se passe actuellement ...


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 28-07-2010 à 14:30:19    

vu,
 
dans le fichier créate.php

Code :
  1. fwrite($ouverture,'


 il faut remplacer la virgule et de l'apostrophe par une parenthèse fermante et le point-virgule.
 
mais donne nous plus de détail sur ton problème :)


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 28-07-2010 à 16:28:49    

Dj YeLL a écrit :

 

1> Non, "tout" ne fonctionne pas "parfaitement", sinon tu ne serais pas là à nous dire qu'il y a un problème ...

 

2> Quel problème ? Tu n'expliques rien à ce qui est censé se passer exactement, et à ce qui se passe actuellement ...

 


et bien, ce script est censé créer un fichier .php et se servir d'un formulaire pour transmettre des donnée à un script qui se trouve dedans.

 

le fichier sera une image qui affichera le nombre de message, le rang et l'expérience du membre.

 

le problème, c'est que le fichier php ne se créer, mais est vide.


Message édité par bnmkt le 28-07-2010 à 16:30:51
Reply

Marsh Posté le 29-07-2010 à 11:38:55    

il faut utiliser fwrite($ouverture,$img);
il faut d'abord que tu enregistre ton image dans un fichier, là tu l'affiche sans la sauvegarder !


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 29-07-2010 à 23:06:08    

Evite les spoilers pour les bouts de code, on peut pas copier/coller :/
 
Déjà, j'aimerais que tu me dises un truc :
 

bnmkt a écrit :


fichier créate.php :

Citation :

...
 fwrite($ouverture,'
 
 <?php
header ("Content-type: image/PNG" );
$bonhomme = "'.$fond.'";
$image = imagecreatefromPNG($bonhomme);
$file = file_get_contents("http://www.blablaland.com/site/membres.php?p=".$if2."" );
preg_match("`<!-- GETXP: (.*) -->`U", $file, $xp);
preg_match("`show_as=topics class="fofo_link_extern">(.*)</a>`isU", $file, $forum);
preg_match("`<div align="center"><strong>(.*)</strong>`isU", $file, $grade);
$login = "".$pseudo2."";
$xp1 = "".$xp[1]."";
$rank = "".$grade[1]."";
$post = ""$forum[1]."";
$pseudo = "".$login."";
$blanc = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 10, 210,35, $rank, $blanc);
imagestring($image, 10, 210,85, $post, $blanc);
imagestring($image, 10, 210, 130, $xp1, $blanc);
imagestring($image, 10, 200,170, $pseudo, $blanc);
imagePNG($image);
?>
 
');
 fclose($ouverture);
 echo ' ton image a bien été crée, tu peux y accédé ici : <a href="'.$name.'">'.$name.'</a> ';
 ?>
...



 
Les trucs en bleu : tu veux qu'ils soient remplacés par leur valeur avant d'être copié par fwrite()?
Parce que là, comme c'est codé, c'est copié tel quel.
 
Ca veut dire que ton fichier crée par ce script aura strictement ce qui se trouve après fwrite() !
 
Et aussi, évite les "" . $var . "" (je faisais la même erreur au début  :D ), et écris directement . $var .
Exemples :

Citation :

$var1 = $var2;
$var1 = $var2 . "truc";
$var1 = "truc" . $var2;
$var1 = "truc" . $var2 . "encore un truc";


 


---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 29-07-2010 à 23:07:43    

Gluonk a écrit :

Evite les spoilers pour les bouts de code, on peut pas copier/coller :/
 
Déjà, j'aimerais que tu me dises un truc :
 


 

Gluonk a écrit :


 
Les trucs en bleu : tu veux qu'ils soient remplacés par leur valeur avant d'être copié par fwrite()?
Parce que là, comme c'est codé, c'est copié tel quel.
 
Ca veut dire que ton fichier crée par ce script aura strictement ce qui se trouve après fwrite() !
 
Et aussi, évite les "" . $var . "" (je faisais la même erreur au début  :D ), et écris directement . $var .
Exemples :

Citation :

$var1 = $var2;
$var1 = $var2 . "truc";
$var1 = "truc" . $var2;
$var1 = "truc" . $var2 . "encore un truc";


 


 
 
 
oui, j'aimerai que les variable soit remplacée avant d'être enregistrée :)

Reply

Marsh Posté le 29-07-2010 à 23:11:08    

Ça roule, j'essaie de te faire ça dans la foulée.


---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 29-07-2010 à 23:14:36    

Ah oui dis-moi exactement les variables qui doivent être remplacée dans ce que j'ai mis en bleu, parce que j'ai un doute :/
 
edit :  
 
ok essaies ça déjà pour create.php
 

Citation :


<?php
 
$name=$_POST['name'];
$pseudo2=$_POST['pseudo'];
$if2=$_POST['id'];
$fond=$_POST['picto'];
//$bordersize=$_POST['bordersize'];
$ouverture = fopen("".$name."", "w" );
fwrite($ouverture, '
 
<?php
header ("Content-type: image/PNG" );
$bonhomme = "'.$fond.'";
$image = imagecreatefromPNG($bonhomme);
$file = file_get_contents("http://www.blablaland.com/site/membres.php?p=' . $if2 . '" );
preg_match("`<!-- GETXP: (.*) -->`U", $file, $xp);
preg_match("`show_as=topics class="fofo_link_extern">(.*)</a>`isU", $file, $forum);
preg_match("`<div align="center"><strong>(.*)</strong>`isU", $file, $grade);
$login = ' . $pseudo2 . ';
$xp1 = "".$xp[1]."";
$rank = "".$grade[1]."";
$post = ""$forum[1]."";
$pseudo = "".$login."";
$blanc = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 10, 210,35, $rank, $blanc);
imagestring($image, 10, 210,85, $post, $blanc);
imagestring($image, 10, 210, 130, $xp1, $blanc);
imagestring($image, 10, 200,170, $pseudo, $blanc);
imagePNG($image);
?>
 
');
 
 fclose($ouverture);
 echo ' ton image a bien été crée, tu peux y accédé ici : <a href="'.$name.'">'.$name.'</a> ';
 
 ?>

Message cité 1 fois
Message édité par Gluonk le 29-07-2010 à 23:17:20

---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 29-07-2010 à 23:18:09    

Gluonk a écrit :

Ah oui dis-moi exactement les variables qui doivent être remplacée dans ce que j'ai mis en bleu, parce que j'ai un doute :/


 
 
'.$fond.'  doit être remplacée par le lien d'une image
 
 
'.$if2.' doit être remplacée par un nombre  
 
 
'.$pseudos.' doit être remplacer par un pseudo.
 
le reste des variable sont pour le site en question :)
 
 
merci beaucoup de ton aide :)

Reply

Marsh Posté le 29-07-2010 à 23:18:09   

Reply

Marsh Posté le 29-07-2010 à 23:20:49    

Bah c'est bon j'ai corrigé le code dans mon dernier post ;)
En espérant que tout aille bien.


---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 29-07-2010 à 23:31:47    

merci :)
 
il semblerai que mon fichier de base soit mal codé car j'ai une erreur à la ligne 9 ...  :(

Reply

Marsh Posté le 29-07-2010 à 23:39:42    

Bah postes-nous ton fichier base.php généré avec ma correction de create.php, qu'on puisse voir.


---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 29-07-2010 à 23:41:04    

et bien c'est le code du fichier généré :  
 

Citation :


<?php
header ("Content-type: image/PNG" );
$bonhomme = "'.$fond.'";
$image = imagecreatefromPNG($bonhomme);
$file = file_get_contents("http://www.blablaland.com/site/membres.php?p=' . $if2 . '" );
preg_match("`<!-- GETXP: (.*) -->`U", $file, $xp);
preg_match("`show_as=topics class="fofo_link_extern">(.*)</a>`isU", $file, $forum);
preg_match("`<div align="center"><strong>(.*)</strong>`isU", $file, $grade);
$login = ' . $pseudo2 . ';
$xp1 = "".$xp[1]."";
$rank = "".$grade[1]."";
$post = ""$forum[1]."";
$pseudo = "".$login."";
$blanc = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 10, 210,35, $rank, $blanc);
imagestring($image, 10, 210,85, $post, $blanc);
imagestring($image, 10, 210, 130, $xp1, $blanc);
imagestring($image, 10, 200,170, $pseudo, $blanc);
imagePNG($image);
?>  

Reply

Marsh Posté le 30-07-2010 à 02:52:44    

Bon, dernier essai après je n'ai plus d'idées  :sweat:  :
 

Citation :

<?php  
 
$name=$_POST['name'];  
$pseudo2=$_POST['pseudo'];  
$if2=$_POST['id'];  
$fond=$_POST['picto'];  
//$bordersize=$_POST['bordersize'];  
if (!$ouverture = fopen($name, "w" )) echo "Le fichier ne peut pas être ouvert (create.php, ligne 8)";  
 
$content = '
<?php  
header ("Content-type: image/PNG" );  
$bonhomme = "'.$fond.'";  
$image = imagecreatefromPNG($bonhomme);  
$file = file_get_contents("http://www.blablaland.com/site/membres.php?p=' . $if2 . '" );  
preg_match("`<!-- GETXP: (.*) -->`U", $file, $xp);  
preg_match("`show_as=topics class="fofo_link_extern">(.*)</a>`isU", $file, $forum);  
preg_match("`<div align="center"><strong>(.*)</strong>`isU", $file, $grade);  
$login = ' . $pseudo2 . ';  
$xp1 = "".$xp[1]."";  
$rank = "".$grade[1]."";  
$post = ""$forum[1]."";  
$pseudo = "".$login."";  
$blanc = imagecolorallocate($image, 0, 0, 0);  
imagestring($image, 10, 210,35, $rank, $blanc);  
imagestring($image, 10, 210,85, $post, $blanc);  
imagestring($image, 10, 210, 130, $xp1, $blanc);  
imagestring($image, 10, 200,170, $pseudo, $blanc);  
imagePNG($image);  
?>';
 
if (!fwrite($ouverture, $content)) echo "Le fichier ne peut pas être écrit (create.php, ligne 32)";  
   
fclose($ouverture);  
echo ' ton image a bien été crée, tu peux y accédé ici : <a href="'.$name.'">'.$name.'</a> ';  
   
 ?>


 
J'ai placé le contenu à écrire dans une variable.
 
Aussi, j'ai utilisé des if (!...etc).
C'est une technique propre de codage : au lieu d'écrire directement une action (ex : fwrite(...)) on teste sa négation, ce qui revient à la réaliser (je ne sais pas trop pourquoi, vu qu'un if (!$var==$var2) ne définiera pas la $var comme ayant le contenu de $var2, mais bon, faut pas chercher...).
edit : correction -> au lieu d'appeler directement une fonction (ex: fwrite(...) )on teste sa négation. La fonction va donc être lue, et donc son contenu exécuté ! Pour la négation d'une variable, le fait de lire la variable ne fait rien ;).
 
Du coup on peut écrire un petit message perso qui s'affichera en cas d'échec. ;)


Message édité par Gluonk le 30-07-2010 à 13:00:36

---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 30-07-2010 à 09:14:03    

Merci, je vais tester ceci :)
 

Reply

Marsh Posté le 30-07-2010 à 09:20:10    

je pense savoir quel est le problème.

 

le fichier create.php  fonctionne parfaitement,
par contre, le fichier créer (test.php) a un problème :

 

preg_match("`show_as=topics class="fofo_link_extern">(.*)</a>`isU", $file, $forum);  

 

fofo_link_extern n'est pas dans le code a cause du  " devant preg_match(    
j'ai un p(tit peu essayer de trafiquer, seulement il y a toujours une partie qui bloque ...

  

ps: désolé pour le double post, je ne sais pas comment supprimer ._.


Message édité par bnmkt le 30-07-2010 à 09:21:03
Reply

Marsh Posté le 30-07-2010 à 12:48:20    

Il suffit :
- soit d'échapper les guillemets à l'aide d'un anti-slash
- soit d'utiliser des apostrophes pour entourer la pattern
 
Comme la variable $content utilise déjà des apostrophes pour entourer son contenu, il est préférable d'essayer d'échapper les guillemets :

Citation :

preg_match("#<!-- GETXP: (.*) -->#U", $file, $xp);  
preg_match("#show_as=topics class=\"fofo_link_extern\">(.*)</a>#isU", $file, $forum);  
preg_match("#<div align=\"center\"><strong>(.*)</strong>#isU", $file, $grade);


 
Si ça ne marche toujours pas, essaies ça (après avoir testé la 1ère solution ci-dessus stp!) :

Citation :


$pattern1 = \'#\' . preg_quote(\'<!-- GETXP: (.*) -->\') . \'#U\';
$pattern2 = \'#\' . preg_quote(\'show_as=topics class="fofo_link_extern">(.*)</a>\') . \'#isU\';
$pattern3 = \'#\' . preg_quote(\'<div align="center"><strong>(.*)</strong>\') . \'#isU\';
preg_match($pattern1, $file, $xp);  
preg_match($pattern2, $file, $forum);  
preg_match($pattern3, $file, $grade);


 
Dans cette 2e solution j'ai utilisé des apostrophes échappées (c'est un peu plus long), et j'ai aussi utilisé preg_quote pour nettoyer les pattern (on sait jamais).
J'ai choisi # plutôt que ` comme délimiteur (c'est plus visible).
 
Bon, va falloir que ça marche  :sweat:  
 


Message édité par Gluonk le 30-07-2010 à 12:54:29

---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 30-07-2010 à 12:58:26    

Ah oui les anti-Slash pourquoi je n'y ai pas pensé plus tôt !
 
Merci (encore ) , je vais essayer ça de-suite :)

Reply

Marsh Posté le 30-07-2010 à 13:10:31    

ça fonctionne :D
par contre je pense que je vais aussi utiliser la deuxième solution, ça fait un petit peu bizarre

 

http://kingtime.franceserv.com/BBL/dina/new/test.php

 

ça suffira pour l'instant :)
Un grand Merci avec un Grand M pour ton aide :)


Message édité par bnmkt le 30-07-2010 à 13:28:00
Reply

Marsh Posté le 30-07-2010 à 13:49:43    

Houlà oui c'est pas top :/
Punaise, je comprend vraiment pas...
 
Au fait, il semblerait qu'au lieu de mettre :

Citation :

if (!$ouverture = fopen($name, "w" )) echo "Le fichier ne peut pas être ouvert (create.php, ligne 8)";


il soit plus propre de mettre :

Citation :

$ouverture = fopen($name, "w" ) or die("Le fichier ne peut pas être ouvert (create.php, ligne 8)" );


Message édité par Gluonk le 30-07-2010 à 13:54:32

---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 30-07-2010 à 13:52:24    

c'est vrai que ce n'est pas le top, mais vu que je suis le seul sur le site a proposer un générateur comme ça, ils me laisseront le temps :)
je vais quand même chercher pour régler ce petit problème.
 
et (encore) merci :)  ( je l'ai dit beaucoup de fois :x )

Reply

Marsh Posté le 30-07-2010 à 13:57:36    

Hey attends, essaies ça :

Citation :

$xp1 = $xp[1];  
$rank = $grade[1];  
$post = $forum[1];  
$pseudo = $login;


 
Parce que toi tu mets des "" . $var . "" :D


Message édité par Gluonk le 30-07-2010 à 14:02:49

---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 30-07-2010 à 14:00:47    

lol :x, ça fonctionne parfaitement :x
 
par contr, avec les anti-slash, le nombre de message n'apparait pas :x  
 
(je vais surement supprimer cette fonction, pas la peine de chercher :)  )

Reply

Marsh Posté le 30-07-2010 à 14:05:00    

:jap: cool
 
Mais si tu veux qu'on règle le problème des messages, je suis toujours dispo!


---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 30-07-2010 à 14:06:40    

ben j'ai pas vraiment envie qu'on croie que je me sert des autres :x
 
 
mais si tu veux, tu peux.
(j'aurai pas à modifier l'image :x)

Reply

Marsh Posté le 30-07-2010 à 14:22:01    

Essaies ça :

Citation :

$pattern2 = \'#show_as=topics class="fofo_link_extern">(.*)</a>#isU\';
preg_match($pattern2, $file, $forum);


---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 30-07-2010 à 14:31:58    

pattern2   reste pattern2 dans le script.
 
j'ai essayer  d'ajouté des guillemet autour mais ça ne fonctionne pas :x

Reply

Marsh Posté le 30-07-2010 à 14:40:55    

Oui mais c'est normal que ce que je t'ai mis ici soit tel quel dans le fichier final généré.
 
Par contre, je comprend pas pourquoi ça ne fonctionne pas quand il est lu :/
Désolé je fais une pause, j'en ai marre de cette maudite fonction preg_match [:ginie]


---------------
Feedback | Zappateers Radio [Bully's Streams] (http://zappateers.oblivion-software:8000)
Reply

Marsh Posté le 30-07-2010 à 14:41:58    

lol, je comprend, je vais chercher un moyen de changer ça :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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