Forum Programmation.php compatibilités sur les fonctions de gestion de fichier en php

Posté par  .
Étiquettes : aucune
0
27
sept.
2006
Bonjour,
j'ai en fait, un problème, voici ma situation :
j'ai réalisé un script visant contrôler et traiter des informations puis de s'en servir pour générer un dossier puis à l'intérieur, y générer deux fichiers, tout fonctionne très bien en local mais voilà, dès que je teste le script en ligne, je constate ceci : le dossier est généré, mais les deux fichiers n'existent pas!

voici le code utilisé pour générer le dossier :
mkdir('youyou/'.$repertoire.'/','777');

et le code utilisé pour générer les deux fichiers :
$fichier=fopen('youyou/'.$repertoire.'/toutou.php','x+');
$fichier_css=fopen('youyou/'.$repertoire.'/toutou.css','x+');
fputs($fichier,'code etc...');
fputs($fichier_css,'code etc...');


je suis sous Windows alors que mon serveur (mon hébergeur plus exactement) est sous Linux la version de php en ligne est la 4.4.4 alors que celle que j'utilise en local est 4.3.1.

Quelqu'un pourrait-il me dire où est l'erreur???

merci d'avance
  • # fopen + modes

    Posté par  . Évalué à 1.

    Bonsoir,

    As-tu éssayé d'autres modes ? 'w' par exemple ?
    • [^] # Re: fopen + modes

      Posté par  . Évalué à 1.

      oui, ainsi que w+ mais sans résultats là encore..
  • # Problème de droits ?

    Posté par  . Évalué à 4.

    Je ne veux pas lancer de troll, mais la gestion des utilisateurs et des droits est un peu pourrie sous windows... Si tu travailles en administrateur sur ta machine, et que le daemon apache est lancé en administrateur, tu peux créer des répertoires à peu près n'importe où sur ta machine.
    Chez ton hébergeur, c'est différent, puisqu'il est sous linux.
    Normalement, l'utilisateur qui lance le daemon apache, c'est l'utilisateur apache, du groupe apache. Peu importe le nom de l'utilisateur et/ou du groupe, ce qui compte, c'est que le daemon ne soit pas lancé en tant que root.
    Tout ça pour dire que si ton script fonctionne en local mais ne fonctionne pas chez ton hébergeur, c'est probablement un problème de droits dans le répertoire dans lequel tu travailles.
    L'utilisateur d'apache semble avoir le droit de créer des fichiers et/ou répertoires dans youyou/, mais conserve-t-il ces droits dans youyou/répertoire ?
    Si tu as un accès console à la machine de l'hébergeur, tu pouras le constater avec un "ls -ld youyou" dans un premier temps, et un "ls -ld youyou/" ensuite.
    Sinon, il se peut aussi que les chemins utilisés pour la création des fichiers et/ou répertoires soit mal interprétés. J'ai pour habitude de remplacer :
    $fichier=fopen('youyou/'.$repertoire.'/toutou.php','x+');
    par
    $fichier=fopen(getcwd().'/youyou/'.$repertoire.'/toutou.php','x+');
    La fonction getcwd récupére le répertoire de travail courant, cf.
    http://fr.php.net/manual/fr/function.getcwd.php
    Voilà, en espérant que ces quelques lignes te seront utiles.
    • [^] # Re: Problème de droits ?

      Posté par  . Évalué à 3.

      mkdir('youyou/'.$repertoire.'/','777');

      1/ mkdir prend comme 2eme parametre un entier, mais bon jusque la, ca va bien, php va faire la conversion comme un grand

      2/ le 777 que tu veux utiliser doit en fait etre en octal, donc 0777, 777 est en decimal, ce qui correspond a 1411 en octal, ce qui donne un truc genre r----x--t, donc on ne pourra pas écrire dedans.

      3/ C'est généralement une mauvaise idée de faire quoi que ce soit qui utilise un appel systeme sans vérifier si ca retourne une erreur.
      • [^] # Re: Problème de droits ?

        Posté par  . Évalué à 2.

        donc d'après toi Da bou, ça peut venir de la destination...
        en lisant la description de la fonction dont tu m'as envoyée le lien, je me suis dit que le problème venait peut être d'un dossier parent qui n'autoriserait pas l'ecriture, mais j'aimerais savoir un truc, si c'était possible, je ne pourrais pas uploader mes fichiers dans ces répertoires, alors que je peux très bien le faire!
        donc bon, j'ai essayé de suivre ton idée mais après une trentaine d'essais et après avoir retourner ce code dans tous les sens, toujours aucun résultat positif! je vais donc essayer de générer de la même manière chaque dossier parent à "youyou" en esperant que ca donne quelque chose -__-
        merci beaucoup pour ton aide
        duaner :
        j'ai aussi suivi ton conseil mais sans succès, je vais voir si je peux avoir un accès de type console chez mon hebergeur sinon je vais devoir trouver une autre solution pour mon projet :'(
        encore merci pour votre aide, je reviens vous tenir au courant, dès que possible
        bonne soirée
        • [^] # Re: Problème de droits ?

          Posté par  (site web personnel) . Évalué à 2.

          Heu bêtement essaye de créer un répertoire upload a la racine de ton site (par l'accès ftp)

          Met ce répertoire en mode 0756
          (lecture+écriture+ex,lecture+ex,écriture+ex,écriture+ex)
          Ce qui évitera que apache puisse lister le contenu, mais pas toi avec le client ftp...

          Et essaye après avec tes scripts php (tournant sous l'user apache de créer des fichiers dans ces répertoires)

          Essaye de créer les fichier en mode w tout court au début ;)

          ps : il est une très très mauvaise idée de créer des fichiers .php que tu va exécuter ensuite dans un répertoire accessible en écriture a tous !!!
    • [^] # Re: Problème de droits ?

      Posté par  (site web personnel) . Évalué à 0.

      > Normalement, l'utilisateur qui lance le daemon apache, c'est l'utilisateur apache, du groupe apache.

      Que veut dire ton normalement ? Sur ton PC ?
      Il est fortement déconseillé d'utiliser un utilisateur générique pour l'utilisateur apache (celui que l'on trouve dans le fichier httpd.conf ou apache2.conf); on utilise un utilisateur sans droit, juste lecture sur l'espace web.

      Pour le groupe c'est pareil.

      > Peu importe le nom de l'utilisateur et/ou du groupe, ce qui compte, c'est que le daemon ne soit pas lancé en tant que root.

      Et par quel miracle ton utilisateur apache arive-t-il à ouvrir une connexion sur le port 80 ? Seul root peut ouvrir une connexion sur le port 80. C'est bien root qui lance apache. Il y a un processus apache superviseur appartenant à root qui fait des forks qui ont les droits de l'utilisateur dont on parle plus haut.
      • [^] # Re: Problème de droits ?

        Posté par  . Évalué à 2.

        > Que veut dire ton normalement ? Sur ton PC ?
        Oui, mais pas seulement sur le mien. Je te renvoie à la doc du LFS/BLFS que j'ai utilisé pour installer mes machines. Et là, oh, surprise, c'est l'utilisateur apache du groupe apache. A aucun moment je n'ai parlé d'un utilisateur ayant des droits, relis mon post ;-) !
        http://www.linuxfromscratch.org/blfs/view/stable/server/majo(...)

        Ensuite, mes explications n'étaient probablement pas très claires, mais il est évident que c'est root qui lance le processus principal, et que c'est l'utilisateur d'apache qui détient des process forkés.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.