problème écriture dans un fichier texte

christo22
Invité n'ayant pas de compte PHPfrance

05 janv. 2010, 17:41

bonjours à tous :)
c'est un ami de classe qui ma conseiller se forum .
à l'école on commence à peine à étudier le php donc je suis encore très débutant.
Le prof nous a donner un exercice mais je ne trouve pas comment faire :(

il faut créer une page.php qui exécute un code mais se code se trouve sur une autre page html !
et il faut que le code php fonctionne et le tout doit être en une ligne :s
j'ai essayer ça :
fwrite(fopen("page.php","w"),'<?php echo(file_get_contents("codephp.txt" ));?>'
le code s'écrit dans le fichier mais dans le navigateur, il n'est pas exécuter en tant que php, je le vois dans le code source se la page mais la page est vide :(

Merci beaucoup d'avance de m'aider

ViPHP
ViPHP | 5462 Messages

05 janv. 2010, 17:45

t'es vraiement dans la base base la, je te conseil d'allé lire un tuto pour debutant

pour ce que tu cherches c'est include, include_once, require, require_once

christo22
Invité n'ayant pas de compte PHPfrance

05 janv. 2010, 18:01

salut et merci,
non je ne peut pas utiliser include ou require c'est le prof qui nous a dit ça .Il a dit qu'on suppose que le fichier est sur un autre serveur et qu'on ne peut pas utiliser include ou require.Et il veut que l'instruction soit on une ligne .Donc fopen je crois que sa se fait pas en une ligne .On m'a dit que petre avec eval() mais je connais pas :( .Il se peut même que la fonction ne soit pas réalisable en une ligne, le prof nous fait des fois ses coup !
bref merci pour celui qui va m'aider !

ViPHP
ViPHP | 5462 Messages

05 janv. 2010, 18:06

oui tu peu le faire avec eval,
par contre ton prof est naze (troll powa),
parce que eval = trou de securité, et lire un script a distance = trou de securité

tu pourras faire :

Code : Tout sélectionner

eval(file_get_content('monfichier.txt'));
http://php.net/manual/fr/function.eval.php

je veux bien le mail de ton prof, je me demande bien qu'est ce qui est justifiable dans le choix se c'est TP. :mrgreen:

ViPHP
AB
ViPHP | 5818 Messages

05 janv. 2010, 22:40

Peut-être as-tu mal interprété l'exercice... peut-être s'agit-t-il simplement de récupérer un fichier distant auquel cas file_get_contents() est le plus adapté. (note qu'il faut un s à la fonction).
Sinon effectivement on conseille toujours d'éviter d'utiliser eval() pour les raisons qu'a dit stealth35 et en plus le temps d'exécution est long (non optimisé). C'est bizarre de commencer une initiation par ça, à moins que ce soit pour vous montrer les trous de sécurité :-k

ViPHP
ViPHP | 1136 Messages

05 janv. 2010, 22:45

Slt ,

Le fichier distant est un ficher HTML d'apres ce que tu dis ...

Pas besoin donc d'eval ou autre pirouette pour arriver à ses fins ...

Imaginons , deux fichiers :

a.php
et
b.php ( l'extention n'a pas d'importance ici )

Voici le contenu de b.php :

Code : Tout sélectionner

<b>Je suis le fichier distant B</b>
Et le fichier a.php , qui va lire b.php en 1 ligne !
<?php
readfile('b.php');//ce qui affichera en gras:  "Je suis le fichier distant B"
?>
cdt ,
Ch.

ViPHP
ViPHP | 5462 Messages

05 janv. 2010, 23:49

Peut-être as-tu mal interprété l'exercice... peut-être s'agit-t-il simplement de récupérer un fichier distant auquel cas file_get_contents() est le plus adapté. (note qu'il faut un s à la fonction).
Sinon effectivement on conseille toujours d'éviter d'utiliser eval() pour les raisons qu'a dit stealth35 et en plus le temps d'exécution est long (non optimisé). C'est bizarre de commencer une initiation par ça, à moins que ce soit pour vous montrer les trous de sécurité :-k
les profs des fois... y'a des bon profs comme y'a des mauvais élèves sauf que le problème sera toujours du même coté :wink:
Slt ,

Le fichier distant est un ficher HTML d'apres ce que tu dis ...

Pas besoin donc d'eval ou autre pirouette pour arriver à ses fins ...

Imaginons , deux fichiers :

a.php
et
b.php ( l'extention n'a pas d'importance ici )

Voici le contenu de b.php :

Code : Tout sélectionner

<b>Je suis le fichier distant B</b>
Et le fichier a.php , qui va lire b.php en 1 ligne !
<?php
readfile('b.php');//ce qui affichera en gras:  "Je suis le fichier distant B"
?>
cdt ,
Ch.
non son fichier distant est un fichier PHP et qui doit etre excuter, en plus la dans ton exemple c'est pas un fichier distant mais un fichier local, et readfile n'est pas optimisé pour lire des simples fichier texte (meme si pour ton type d'exemple c'est tout a fait correct), pour ca c'est file_get_contents ou plus en detail avec fopen :wink:

christo22
Invité n'ayant pas de compte PHPfrance

06 janv. 2010, 01:01

bonsoir et merci énormément pour vos messages !
je sais pas si je doit utiliser redfile, file_get_contents ....
Non j'ai pas mal interprété l'exercice , mais le fichier doit pas forcément être un html.il s'agit de récupéré un code php sur un serveur distant et de l'exécuter.et on peut pas utiliser require ou include.et il doit être en une seul commande, une seule ligne quoi .
j'ai pas mis text.html sur un serveur distant mais sa doit être la même chose non ?Bref j'ai essayer ça :
fwrite(fopen("page.php","w"),'<?php eval(file_get_content("text.html"); ?>')
dans text .html il y avais
<?php echo("ok");?>
dans page.php j'ai u comme résultat :
<?php eval(file_get_content("text.html"); ?>
mais j'ai u une erreur quand j'ai exécuter page.php :(
Parse error: parse error in C:\wamp\www\page.php on line 1

Merci d'avance pour votre aide !

ViPHP
ViPHP | 5462 Messages

06 janv. 2010, 01:11

ta eté faire un tour sur la doc de eval ?
eval prend en compte uniquement du code php

tu peu faire :

Code : Tout sélectionner

eval('echo "ok"');
ce qui revient a faire :

Code : Tout sélectionner

<?php echo "ok" ?>
mais tu inclue ton fiche qui contient deja des balise ca ferai comem si tu faisais : <?php <?php echo "ok" ?> ?> ducoup il comprend pas <?php en php ca veux rien dire
donc astuce (vu sur la doc, d'ou l'avantage de bien la lire surtout quelle est treeeees bien faite (http://www.php.net/manual/fr/function.eval.php#95478):

Code : Tout sélectionner

eval('?>' . file_get_contents('b.php') . '<php');
qui va revenir a faire

Code : Tout sélectionner

<?php ?><?php echo "ok"; ?><?php ?>
et le tour est joué,
par contre je te le dis tout de suite c'est super moche et bien tordu, mais on rentre dans les criteres debiles de ton TP (sauf si c'est moi le debile et y'a une autre astuce... c'est probable) :wink:
ps : tu nous posteras la correction

christo22
Invité n'ayant pas de compte PHPfrance

06 janv. 2010, 01:52

Pour être franc,non j'ai pas l'u la documentation.Je vais voir la correction du TP et si il va utiliser eval je vais la lire !
j'ai essayer ça:
fwrite(fopen("page.php","w"),'<?php eval(file_get_content("text.html"); ?>')
avec
eval('echo "ok"');

et toujours la même erreur :(

ViPHP
AB
ViPHP | 5818 Messages

06 janv. 2010, 04:46

Pour être franc,non j'ai pas l'u la documentation.Je vais voir la correction du TP et si il va utiliser eval je vais la lire !
j'ai essayer ça:
fwrite(fopen("page.php","w"),'<?php eval(file_get_content("text.html"); ?>')
avec
eval('echo "ok"');

et toujours la même erreur :(
Mais heu... arrêtes avec ton fwrite(fopen( ...

Sur un site distant tu mets un fichier que tu nommes par exemple "test_eval.php" et dans lequel est écrit ces lignes
<?php
$test = 'Le test eval est ok. Pirate tu as fais executer mon code, je suis mort !';
echo $test;
?>
Ensuite en local chez toi, il te suffit d'écrire dans un fichier que tu mets sur ton serveur d'évaluation :
<?php
eval('?>' . file_get_contents('http://www.nom_du_site_distant/test_eval.php'));
?>
Testes ce fichier sur ton serveur d'évaluation en local (en ayant remplacé "nom_du_site_distant" par la bonne valeur) et tu pourras lire
Le test eval est ok. Pirate tu as fais executer mon code, je suis mort !
Sauf si évidemment allow_url_fopen est désactivé sur le serveur distant où tu as mis "test_eval.php"

Eléphant du PHP | 453 Messages

06 janv. 2010, 06:57

Hello,

J'ai lu le sujet en biais version Ferrari mach 6. :langue: Je ne vois pas où veut en venir ton prof. Il y a sur le forum un message similaire avec mon bout de réponse.
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

ViPHP
ViPHP | 1136 Messages

06 janv. 2010, 09:04

Et bien écoutes , j'ai hâte de connaitre la réponse et les explications de ton prof :-)

Pour info ,

readfile() fonctionne aussi très bien pour le fichiers distants , la différence avec file_get_contents() , et qu'il envoie le contenu du fichier directement dans le buffer de sortie ( ce qui est parfait pour un fichier pure html ) , alors que file_get_contents() lui , récupère le contenu dans une chaine .

Sinon , effectivement file_get_contents() est une fonction plus complète niveau paramètres .

Bonne journée ,
Ch.