pb creation de fichier en PHP
15 sujets de 1 à 15 (sur un total de 16)
- 1
- 2
-
voilà j’ai le bout de code suivant :
$dir = ‘Pages/’;
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) { $pages[] = $filename; }
closedir($dh);
$n_page = count($pages);
$crfic=fopen(« Pages/page ».$n_page. ».html », »w+ »);
etc
le hic, c’est qu’il me crée DEUX fichiers (identiques) à la fois! si je force une valeur $n_page, apparement ça va. J’avoue que la logique m’échappe…
euh… apparement non
quand je fais un echo $n_page; il me donne bien le nombre de fichiers présents dans le dossier /Pages/ (y compris les 2 fichiers racines).
si je fais comme ça, c’est que je n’ai pas besoin à ce moment du script du contenu du tableau mais juste de savoir combien de fichiers il y a dans le dossier en question, pour pouvoir rajouter des nouveaux fichiers, avec des noms incrémentés (page1.html, page2.html, etc). S’il y a un moyen plus simple/propre d’obtenir cette info, je suis preneur.
@ leo
indenter le code correctement? Aprt pour la boucle que j’aurais pu mettre comme ça:
while (false !== ($filename = readdir($dh))) {
$pages[] = $filename;
}
qu’est ce qui cloche?
Ce que je veux, c’est sauvegarder un fichier texte (une page html) dans le dossier /Pages/ avec un nom automtaique page+(n+1)+.html ou n est le nombre de fichiers déjà présents dans le dossier de destination.
@ hombre
effectivement ça devrait marcher. Mais ça ne me dira pas pourquoi il crée 2 fichiers identiques
tu peux preciser l’histoire des deux fichiers identiques ?
deux fichiers identiques ca doit forcement provoquer une erreur
aussi, readdir() va te retourner . et .. donc si dans Page/ tu n’as que des fichiers page1.html,page2.html,….
tu devrais faire un -2 sur ton $n_page pour avoir le compte exact de fichiers
si ton but est uniquement de compter le nombre de fichiers tu peux simplifier tout ca en initialisant ton $n_page a 0 et en remplacant le traitement du while par un $n_page++
comme ca tu vas pouvoir te debarrasser du count() et du $pages qui semble inutilise et obtenir ainsi un truc plus lisible
$dir = ‘Pages/’;
$n_page=0;
$dh = opendir($dir);
while (readdir($dh)) { $n_page++; }
closedir($dh);
//on decompte . et ..
$n_page = $n_page-2;
//on a dit « (n+1) »
$new_n_page=$n_page+1;
$crfic=fopen(« Pages/page ».$n_new_n_page. ».html », »w+ »);
les 2 fichiers crées ont des noms qui se suivent, genre page1.html et page2.html (si le tiroir est vide). Ils ont la même date et heure de création. Ils sont identiques dans leur contenu.
@ adenochrome
un -1 suffit car le tableau commence son indexation à 0
je suis en PHP 4 (chez free)
Merci
bon beh alors ton compteur marchait bien, maintenant il ecrit dans les fichiers ce que tu lui dit d’ecrire et ca visiblement ca se passe pas dans cette partie du code
si si c’est ça qui est dingue.
le problème vient de là car quand je supprime la ligne $crfic=fopen(), aucun n’est fichier n’est créé (jusque là c’est logique…). Par contre quand je mets cette ligne, il me créé 2 fichiers de contenu identique (même taille, même date également) mais avec des noms incrémentés. Pourquoi 2 fichiers???
Sinon oui le compteur fonctionne, ainsi que l’écriture du fichier, ce n’était pas là le problème. Le problème, c’est ce doublon que je ne m’explique pas.
la fonction fopen de php ne peut creer qu’un seul fichier a la fois donc soit tu utilise un serveur php experimental qui a un bug, soit la portion de code est appelee plusieurs fois (ce qui semblerai logique puisque si un seul fopen creait 2 fichiers a lui tout seul $n_page ne pourrai pas etre incremente)
tu as plus qu’a baliser ton fichier avec quelques echo pour confirmer cela
après qq tests, il semblerait que ce soir la présence de la boucle qui produise cet effet étrange.
En remplaçant les 4 lignes de la boucle par
$pages[0]= ». »;
$pages[1]= ».. »;
un seul fichier est créé par la fonction fopen. Apparement le while provoque l’exécution de fopen à 2 reprises.
je viens de mettre le code problématique à part (un fichier php ou il n’y a que le code php suivant :
résultat :
– à l’écran, il m’affiche « 1Pages/page1.html », ce qui est le résultat attendu.
– sur le serveur il me crée un fichier page1.html ET un fichier page 2.html, bref toujours le même problème.
ce que j’ai essayé :
– remplacer « { $pages[] = $filename } » par { $npage++; } => le pb reste le même
– virer le $crfic devant le fopen => le pb disparait
– remplir le tableau « à la main » (cf post précédent), le pb disparait
– forcer une valeur de $n_page => le pb disparait
Bref tout ça me semble bien mystérieux…
Encore plus fort… si je rajoute des commandes entre closedir($dh); et $n_page = count($pages)-1; du genre print_r(pages); ou même de simples lignes echo… le problème se pose à la première exécution du script puis… disparait. On dirait que le serveur va trop vite et du coup me crée 2 fichiers pour le prix d’un !
je viens de coller le bout de code de ton dernier post sur free sans aucune modification, il me genere uniquement page1.html
ensuite a chaque reload il genere un nouveau fichier page(n+1).html
c’est quoi ton serveur ?
15 sujets de 1 à 15 (sur un total de 16)
- 1
- 2
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › pb creation de fichier en PHP