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 Sebastian . Évalué à 1.
As-tu éssayé d'autres modes ? 'w' par exemple ?
[^] # Re: fopen + modes
Posté par CesarX . Évalué à 1.
# Problème de droits ?
Posté par Gyro Gearllose . Évalué à 4.
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 duaner . Évalué à 3.
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 CesarX . Évalué à 2.
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 Raphaël G. (site web personnel) . Évalué à 2.
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 Nicolas (site web personnel) . Évalué à 0.
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 Gyro Gearllose . Évalué à 2.
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.