Aller au contenu

Sujets conseillés

Posté (modifié)

Bonjour,

Voila avec un Wysiwyg j'aimerai editer une page HTML de mon site mais au lieu de la modifier brutalement, j'enregistre les changements dans un fichier portant le meme nom que la page édité mais dans un autre répertoire. Pour une verification avant mise en ligne de la nouvelle page.

J'ai donc mon script PHP qui ouvre le fichier, recupere les données du wysiwyg, mais au moment d'ecrire, j'ai ce code suivant :

$fh = fopen($file,'w') or die("cant open file ".$file);
fwrite($fh,$newdata);
fclose($fh);

(j'ai vérifé le contenu de $file et il est correct)

ca ne crée rien du tout... je me demandais si PHP pouvait recréer les dossiers (par exemple si j'edite le fichier "/var/www/images/galerie/index.html", le fichier modifié se situerai dans "/var/www/valids/images/galerie/index.html".

Actuellement mon dossier "valids" est vide.

2 questions alors :

Est ce que PHP crée les dossiers "images" et "galerie" au moment du fopen ? (ca me parait un peu gros... mais sait on jamais)

Et meme s'il ne le fait pas, quand je crée les dossiers moi meme, mon script ne crée aucun fichier. Alors ou est ce que ca cloche ? (dans le doute j'ai mis 777 en droits d'acces a "valids" et ses sous repertoires, mais ca ne change rien)

Modifié par Nanane
Posté

Il faut déterminer si php tourne en module apache ou en cgi (avec suphp).

Dans le premier ces il hérite des permissions de l'utilisateur sous lequel tourne apache (apache ou nobody), dans le second il hérite des permissions du compte web associé.

Il faut donc que php ait les droits d'écriture dans le répertoire, et donc les droits de recherche (x) dans les répertoires au-dessus pour qu'il puisse au moins trouver le répertoire dans lequel il est supposé créer un fichier.

L'appel à la fonction fopen() ne créera pas les répertoires intermédiaires s'ils sont manquants.

Que vaut ta variable $file dans ton script ? Exécute un

die($file);

pour voir à quoi il est positionné.

PS: et si tu es sous windows, il faut utiliser "rb" au lieu de "r" comme flag lors de l'appel à fopen();

Posté (modifié)

Php fonctionne en module... il me semble ^^ (j'ai fait un locate suphp et ca n'a rien donné...)

Mais dans les 2 cas, comme je l'ai dit, j'ai mis le dossier "valids" et ses successeurs en chmod 777 donc ca devrait aller, non ?

Sinon ma variable $file vaut "\var\www\adamik\valids\adamik\honcopie\index_f.html" au moment de l'ecriture donc c'est bon :s meme si c'est un peu fouilli (c'est le site de test).

De toute facon j'ai créé les repertoires adamik et honcopie donc ca devrait fonctionner...

Merci en tout cas... meme si mon probleme n'est pas encore reglé ^^

Modifié par Nanane
Posté

J'apporte un peu de neuf... j'essaie de creer le fichier a la place de PHP avec un exec tout vilain :

exec("touch ".$filepath);
exec("chmod 777 ".$filepath);

Cela juste avant d'executer la partie "ecriture des données" et en fait... ben ca n'ecrit rien... je comprends plus rien du tout la...

PS: (j'ai créé une fonction PHP qui reprend le chemin du fichier et recrée l'arborescence en affectant 777 en chmod a chaque repertoire créé, ca marche nickel...)

Posté

J'ai resolu mon probleme... j'ai un peu honte ^^

Lorsque j'ai débuté le développement de mon site j'etait sous windows alors il fallait remplacer tous les / par des \\ pour les chemins de fichier...

Et j'ai depuis une semaine changé de plateforme... pour passer sous linux, et ce définitivement. J'ai donc epluché mon code pour enlever les appels a la fonction. (mais j'ai gardé la fonction, on ne sait jamais) et apparemment un appel m'a echappé ^^

ce qui fait que j'avais un path faux. donc forcément php avait du mal a faire son boulot :D

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...