IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] Exécution code php écrit via fwrite()


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 85
    Points : 65
    Points
    65
    Par défaut [Système] Exécution code php écrit via fwrite()
    Bonjour,

    J'ai un problème assez surprenant. J'ai une fonction qui crée un fichier (fopen w+) et qui écrit du code PHP, tout marche bien et j'obtiens le code suivant. test.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <? include("_menus/incl_top.php");  echo "Hello Guys";  include("_menus/incl_end.php"); ?>
    Le echo fonctionne mais il ne peut pas trouver les fichiers à inclure. (Failed to open stream blabla)

    Seulement si j'ouvre ce même fichier et que je fais un copier coller du code dans le fichier test2.php et que je l'execute, là, miracle ! ça fonctionne ! Ils se trouvent dans le même répertoire, ont les mêmes droits d'accès etc.

    Voici la fonction en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function editPage($pageName, $newcontent) {
    	$fileContent = "";
     
    	$header = " <? include(\"_menus/incl_top.php\"); ?>";
    	$end = "<? include(\"_menus/incl_end.php\"); ?> ";
     
    	$handle = fopen($pageName, "w+");
    	$fileContent .= $header;
     
    	$fileContent .= $newcontent;
     
    	$fileContent .= $end;
    	fwrite($handle, $fileContent);
     
    	fclose($handle);
    }
    Puis j'execute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $content = "<? echo \"Hello Guys\"; ?>";
    editPage("../test.php",$content);
    Quelqu'un aurait-il une idée d'où ça peut venir ? fwrite, fopen ?? Le truc est que le code écrit fonctionne parfaitement quand crée via un éditeur. Je comprends vraiment pas.
    "Software is like sex, it's better when it's free" -- Linus Torvalds

  2. #2
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    Salut,
    Juste une question, car je suis pas sûr d'avoir bien saisi.

    Si ces fichiers sont dans le même répertoire, pourquoi fais-tu un include à partir du dossier _menus?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include("incl_top.php");  echo "Hello Guys";  include("incl_end.php");
    Devrait suffir...

    Sinon, c'est qu'ils se trouvent dans un dossier du dossier parent et dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include("../_menus/incl_top.php");  echo "Hello Guys";  include("../_menus/incl_end.php");
    Si tu pouvais nous dire quelle est ton arborescence, ça nous aiderait !
    GAMIN !!!!
    _______________________________________________
    PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 85
    Points : 65
    Points
    65
    Par défaut
    J'ai essayé de placer les fichiers dans le même dossier en changeant l'include bien sur et le problème est le même. Le problème qui est bizarre c'est que le même code copié dans un autre fichier (test2.php) dans le même dossier crée avec un éditeur de texte fonctionne (alors que c'est la même arborescence).
    C'est comme si le fichier crée par PHP n'avait pas les droits pour executer certaines fonctions PHP comme include. Mais ça me paraitrait vraiment bizarre car echo fonctionne par exemple. Je ne sais pas si il y a une notion de droits internes aux fonctions de PHP ? De plus vu l'erreur, la fonction semble s'executer mais ne pas trouver le fichier. J'ai mis les droits a 777 pour voir si ça changeait quelque chose mais non

    Voici le dernier test, j'ai mis tous les fichiers dans le même dossier (test1,2,3 - incl_top, incl_end):
    /test2.php (fichier qui contion la fonction editPage et qui crée le fichier test1.php)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function editPage($pageName, $newcontent) {
    	$fileContent = "";
    	$header = " <? include(\"incl_top.php\"); ?>";
    	$end = "<? include(\"incl_end.php\"); ?> ";
    	$handle = fopen($pageName, "w");
    	$fileContent .= $header;
    	$fileContent .= $newcontent;
    	$fileContent .= $end;
    	fwrite($handle, $fileContent);
    	fclose($handle);
    	echo "DONE";
    }
    Le fichier test1.php est bien crée. Je l'execute, j'obtiens l'erreur suivante:
    Warning: include(incl_top.php) [function.include]: failed to open stream: No such file or directory in /var/www/classes/Awcas/test.php on line 1

    Warning: include() [function.include]: Failed opening 'incl_top.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/classes/Awcas/test.php on line
    (les fichiers y sont bien!)
    J'ouvre ce même fichier avec un éditeur, et je copie-colle le code dans un 3eme fichier, test3.php.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <? include("incl_top.php"); ?><? echo "Hello Guys"; ?><? include("incl_end.php"); ?>
    J'execute le fichier test3.php et....miracle, ça fonctionne ! Même code, même dossier mais l'un est crée par PHP, l'autre par un éditeur. C'est surement au niveau des droits je pense. (PHP 5, Ubuntu 6.10) Mais je ne vois pas. le chmod 777 n'a rien donné.
    "Software is like sex, it's better when it's free" -- Linus Torvalds

  4. #4
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    J'ai eu un peu le même problème avec des fonctions fopen et fwrite.

    La solution est porcine mais fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @chmod ("/ton_folder", 0777);
    @$filename=chmod("/tonfolder/$nom_de_ton_fichier", 0777);
    Je sais, c'est bourrin et en plus il faut désactiver les erreurs (car forcément ça en génère une), mais c'est la seule chose qui fonctionnait pour moi...

    Essaie car je pense que ton code d'origine est bon.

    Un chmod() sur le dossier contenant le fichier créé, puis un autre sur ton fichier lors de sa création.

    Dis-moi le résultat !
    GAMIN !!!!
    _______________________________________________
    PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 85
    Points : 65
    Points
    65
    Par défaut
    J'ai trouvé la moitié de la réponse. Le chmod ne fait rien, par contre le fichier crée par php est de l'utilisateur www-data (apache) et c'est surement cet utilisateur qui n'a pas assez de privileges pour executer certaines fonctions.
    Si je change le proprietaire du fichier par le mien, ça marche. Donc en gros je dois allouer plus de privileges à l'utilisateur www-data. Le problème est que je ne suis pas un gros spécialiste de la console et les outils graphiques ne montrent pas les utilisateurs non-humains.

    Si quelqu'un a une idée, de la marche à suivre.

    Merci.
    "Software is like sex, it's better when it's free" -- Linus Torvalds

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/03/2008, 18h43
  2. [Système] problème d'exécution code php
    Par QuenTinO dans le forum Langage
    Réponses: 1
    Dernier message: 24/04/2007, 11h50
  3. [Système] exécuter firefox côté serveur via php
    Par romano37 dans le forum Langage
    Réponses: 9
    Dernier message: 30/03/2007, 18h28
  4. Réponses: 2
    Dernier message: 17/03/2007, 14h11
  5. Réponses: 7
    Dernier message: 20/10/2005, 20h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo