Fwrite() fichier php

Hept
Invité n'ayant pas de compte PHPfrance

13 mai 2016, 07:39

Bonjour à tous,
Je rédige un script php qui est "censé" écrire dans un fichier (.php) des commandes pour afficher une image et pour détruire le fichier une fois exécuté. Mais j'ai quelques problèmes avec Fwrite()
//j'ouvre un nouveau fichier (.php) avec fopen, aucun problème jusque là
	$lien = (fopen($path,'w'));
	//cette nouvelle page doit afficher une image, et se supprimer une fois quelle à était lancée une fois, l'url pour y accéder étant du typé ...?test=chemin_de_l'image pour récupérer la variable dans un $_GET
	fwrite($lien, "print '<img src=".$test." />';");
	//le chemin vers la page a supprimer étant le chemin_vers_l'image.php
	fwriteh($lien, "<?php unlink($_GET[test].'.php') ;?>");
	fclose($lien);

Il crée bien le fichier, qui contient
print '<img src=".$test." />';
et
<?php unlink(.'.php') ;?>
à la suite. (Je ne peux l'ouvrir que sous la forme d'un text, il renvoie l'erreur "syntax error, unexpected '.' in /////// on line 1.).
Mais, meme si le fichier est crée, il renvoie
Undefined index : test in ///// on line 33. (Qui correspond au test mis à l'intérieur du $_GET)
Si quelqu'un peu m'éclairer sur ses différents problèmes merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 mai 2016, 09:44

Bonjour,

Tu as plusieurs problèmes :
fwrite($lien, "print '<img src=".$test." />';");
Va générer dans ton fichier la chaine suivante :
print '<img src=valeur_de_test />';
il n'y a donc pas de balises php pour indiquer au serveur que ce code est du php et non du html.
Le code suivant devrait mieux fonctionner (j'en profite pour ajouter des guillemets à l'attribut src) :
fwrite($lien, "<?php print '<img src=\"" . $test . "\" />'; ?>");
A noter que tu peux aussi juste virer le print pour avoir le code html de l'image sans avoir à ajouter les balises php :)
fwrite($lien, "<img src=\"" . $test . "\" />");
De même
fwriteh($lien, "<?php unlink($_GET[test].'.php') ;?>");
va générer le code suivant
<?php unlink(valeur_de_GET_test . '.php') ;?>
Ici il manque des apostrophes ou guillemets autour de la chaine 'test' pour indiquer à php qu'il ne s'agit pas d'une constante dont il doit aller chercher la valeur, mais bien de l'attribut "test" qui devrait être passé dans l'url.

Le message " Undefined index : test " t'indique quant à lui que tu n'as pas passé de variable nommée "test" dans l'url et que la variable $_GET['test'] à laquelle tu fais appel n'existe pas

Et comme cette variable n'existe pas, valeur_de_GET_test est vide et le code php produit effectivement l'action <?php unlink(.'.php') ;?> dans laquelle tu concatène la chaine ".php" à rien (ou plus exactement tu concatènes rien à la chaine ".php" :)), ce qui engendre l'erreur de syntaxe.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 65 Messages

13 mai 2016, 10:23

Il me semble qu'il veut que ses variables soient lues au moment de la lecture du fichier. Je ne pense pas que ce soit possible, un fgets renverra une string quoi qu'il arrive.

Hept
Invité n'ayant pas de compte PHPfrance

14 mai 2016, 13:06

Merci de vos réponses.
Effectivement pour le $_GET['test'] je me suis un peu emmêlé les pinceaux, je peux tout simplement utiliser la variable test de la page qui contient le Fwrite :D
Je test tout ça et je reviens vers vous.

Hept
Invité n'ayant pas de compte PHPfrance

16 mai 2016, 22:49

C'est bon, j'ai réussi à me de outiller tout marche ! :D
J'ai une autre petite question, j'essaie d'écrire dans un fichier (ouvert avec fopen) avec fwrite, sous cette forme :
fwrite($fichier, $variable_contient_valeur);
Mais je me retrouve avec ressource id #5 à la place de la valeur de la variable dans mon fichier...

Merci d'avance

Hept
Invité n'ayant pas de compte PHPfrance

17 mai 2016, 13:48

Oubliez mon post d'vant, j'ai réussi à me démerder autrement.
Mais j'ai (encore) un problème.
J'écris dans mon fichier avec fwrite
fwrite($lien, '<?php  
						$itq2 = '.$donnees.';
						if($itq2 != false)
			{
				

		header(\'Content-Type: image/png\') ;
			

			imagepng($itq2);
				

		imagedestroy($itq2);
			} 
	 ');
Avec, $donnees une chaine de caractére (en binaire) qui correspond à une image.
Le script écrit bien la chaine de caractére dans le fichier, mais je me retrouve avec des erreurs du style
'Warning: Unexpected character in input: ' in C:\xampp\htdocs\uploads\1463484416.jpg.php on line 2

Warning: Unexpected character in input: '' (ASCII=16) state=0 in C:\xampp\htdocs\uploads\1463484416.jpg.php on line 2

Parse error: syntax error, unexpected 'JFIF' (T_STRING) in C:\xampp\htdocs\uploads\1463484416.jpg.php on line 2'
Qui correspondent à des élements de la chaine de caractére !
Donc j'aimerais savoir comme faire "comprendre" à php que c'est une chaine de caractére utile à
imagepng()
(A savoir que le code marche en lui meme si je ne l'écris pas avec fwrite)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 mai 2016, 14:07

Bonjour,

Dans ce genre de cas, il est important de partir du résultat que tu souhaite obtenir et de construire ton code en fonction. Pour débuger, récupère le fichier php généré et regarde le code qui a été produit. Tu pourras ainsi plus facilement identifier les erreurs éventuelles.

Regarde notamment la valeur de $donnees et assures-toi que celle-ci correspond à ce que tu attends.

En l'état, si celle-ci ressemble à quelque chose du genre iVBORw0KGgoAAAANSUhEUgAAADIA..., le code php suivant est généré :
<?php  
   $itq2 = iVBORw0KGgoAAAANSUhEUgAAADIA...;
  if($itq2 != false) {
    header('Content-Type: image/png') ;
    imagepng($itq2);
    imagedestroy($itq2);
}
la valeur de la variable $itq2 n'est pas délimitée et va généré une erreur php qui va engendré une erreur dans l'affichage de l'image, ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

hept
Invité n'ayant pas de compte PHPfrance

17 mai 2016, 14:40

Merci de la réponse rapide, mais Jai pas vrizment saisi, en gros l'erreur vient de la valeur de $donnees qui n'est pas bonne ?

Avatar du membre
Mammouth du PHP | 1609 Messages

17 mai 2016, 15:15

Salut, comme Ryle le dit, dans le code du fichier généré, la valeur de la variable $itq2 n'est pas délimitée et va générer une erreur php.
$itq2 = iVBORw0KGgoAAAANSUhEUgAAADIA...;
Devrait être :
$itq2 = 'iVBORw0KGgoAAAANSUhEUgAAADIA...';
Délimitée avec des apostrophes ou des guillemets.
Développeur web depuis + de 20 ans

Hept
Invité n'ayant pas de compte PHPfrance

17 mai 2016, 19:20

J'avais mal interpétré, je test ça.

Hept
Invité n'ayant pas de compte PHPfrance

17 mai 2016, 22:00

Alors, ca avance, mais mainteant j'ai droit à : L'image [...] ne peut étre affiché car elle contient des erreurs...
Les erreurs venants des ' que j'ai mis (je pense)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mai 2016, 10:58

Pour voir si tu as des erreurs, enlèves le header('Content-Type: image/png') ; Tu verras à l'écran (ou dans le code sources) les éventuelles erreurs rencontrées.

Au besoin montre nous le code php qui est généré :)

Il faut procéder par étape. Dans l'idéal, part du résultat que tu veux obtenir quitte à l'écrire en dur dans ton fichier. Une fois que celui-ci fait ce que tu attends, ajoute les balises php et les fonctions qui te serviront à générer ce résultat. Enfin, remplace les parties dynamique par les variables correspondantes :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...