pb creation de fichier en PHP

15 sujets de 1 à 15 (sur un total de 16)

  • 1
  • 2
  • fenrix

      #4358

      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…

      Fab1

        #75655

        ça manque de $pages[$i++] = $filename; à mon avis. Là tu recrées le tableau pages à chaque itération, donc il contient au plus un seul élément à la fin dans ton count().

        fenrix

          #75656

          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

            #75657

            @fab: non, c’est bon ($pages[] = truc <=> array_push($pages, truc))


            @fenrix
            : et si tu commencais par indenter ton code correctement, on y verrait peut être déjà un peu mieux ? :)

            Et si tu pouvais expliquer clairement ce que tu veux ?

            Là j’avoue que je suis pas…

            Léo.

            hombre

              #75658

              Pourquoi ne pas tout simplement initialiser « $n_page=0; » au début, et l’incrémenter dans ta boucle (« $n_page++; ») ?

              fenrix

                #75659

                @ 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 :-/

                hombre

                  #75660

                  @fenrix

                  Quels sont leur nom respectif ? Ont-ils exactement la même date de création ? En quoi sont-ils identique (contenu? nom?) ?

                  Quelle version de PHP utilises-tu ?

                  adrenochrome

                    #75661

                    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+ »);

                    fenrix

                      #75662

                      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

                      adrenochrome

                        #75663

                        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 ;)

                        fenrix

                          #75664

                          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.

                          adrenochrome

                            #75665

                            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

                            fenrix

                              #75666

                              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.

                              fenrix

                                #75667

                                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 :-D!

                                adrenochrome

                                  #75668

                                  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

                                Amiga Impact