joindre des fichiers en PHP

11 sujets de 1 à 11 (sur un total de 11)

  • fenrix

      #3057

      bonjour

      y a t-il une méthode simple (i.e automatique) pour fusionner deux fichiers textes en PHP (en fait coller le contenu d’un fichier texte derrière le contenu d’un second fichier texte)?

      Merci

      Waaagh_

        #59373

        Tu ouvres tes deux fichiers, tu les lis et tu concatènes les chaines :

        $filename = "./fichier1.txt";

        $handle = @fopen($filename,"r") or die("

        Erreur : Fichier introuvable

        ");

        $fichier1 = fread ($handle, filesize ($filename));

        fclose ($handle);

        $filename = "./fichier2.txt";

        $handle = @fopen($filename,"r") or die("

        Erreur : Fichier introuvable

        ");

        $fichier2 = fread ($handle, filesize ($filename));

        fclose ($handle);

        $contenu = $fichier1.$fichier2;

        Après, avec ton $contenu, tu peux faire ce que tu veux, le traiter, l’écrire dans un autre fichier…

        Pour écrire dans un deuxième fichier, tu peux utiliser cette routine :

        $filename = 'test.txt';

        $somecontent = "Ajout de chaîne dans le fichier n";

        // Assurons nous que le fichier est accessible en écriture

        if (is_writable($filename)) {

        // Dans notre exemple, nous ouvrons le fichier $filename en mode d'ajout

        // Le pointeur de fichier est placé à la fin du fichier

        // c'est là que $somecontent sera placé

        if (!$handle = fopen($filename, 'a')) {

        echo "Impossible d'ouvrir le fichier ($filename)";

        exit;

        }

        // Ecrivons quelque chose dans notre fichier.

        if (fwrite($handle, $somecontent) === FALSE) {

        echo "Impossible d'écrire dans le fichier ($filename)";

        exit;

        }

        echo "L'écriture de ($somecontent) dans le fichier ($filename) a réussi";

        fclose($handle);

        } else {

        echo "Le fichier $filename n'est pas accessible en écriture.";

        }

        /me aime le site fr.php.net :-D

        Admin

        bigdan

          #59374

          http://www.php.net/manual/fr/ref.filesystem.php

          (lire le manuel PHP c’est pratique aussi, sinon fopen, file_get_contents et fwrite sont tes amis…)

          Quelle longueur ton 2ème fichier texte ? C’est pas la même chose si c’est un log apache de 2 To ou 3 lignes de texte ! Ce que tu cherche à faire est utilisé dans 3 milliards de scripts PHP de livres d’or (sans bdd mysql) ou de logs par ex qui trainent partout sur la toile…

          Envoie moi un mp si tu veux un petit coup de main.

          Edit : Waaagh t’a carrément copier coller un exemple ci-dessus !

          dAn

          Waaagh_

            #59375

            Bigdan : vi :)

            Effectivement, j’ai recopié (sauvagement) deux exemples du site php.net. J’aimerai cependant ajouter quelque chose : en cas de doute sur une fonction php, reférez-vous à la technologie RTFM, technologie éprouvée par des générations d’informaticiens :-D :-D :-D :-D

            fenrix

              #59376

              merci :)

              pour le coup, je plaide non coupable!

              quand je bosse en PhP, j’ai toujours le manuel en français de phph.net d’ouvert pour pouvoir m’y référer (et j’ai lu les notices sur les différentes fonctions hier soir). Mais j’avoue que j’étais débordé (au niveau compétence) – et peut-être fatigué aussi, vu l’heure.

              j’avais essayé aussi f_put_contents mais apparement ça ne passe pas chez free (php trop récent?)

              en tout ca encore merci, je vais regarder ça tout à l’heure.

              /me LLPDM :-D

              slobman

                #59377

                Hip !!

                Hum… f_put_contents n’existe pas, par contre file_put_contents existe, mais que depuis php5. Par défaut, chez free, une page .php sera traité en php4, il faut mettre .php5 ou regarder dans la faq.

                Pour éviter de te prendre la tête avec les versions de php, tu peux aussi jeter un oeil sur PHP Compat.

                !! qiH

                Fab1

                  #59378

                  En tous cas, l’exemple qui concatène les deux fichiers avec $contenu= $truc1.$truc2, je le déconseille fortement sachant qu’on connait pas le contexte de l’utilisation de ce script.

                  J’imagine bien ce script avec 2 fichiers d’un giga, il va être ravi le serveur (d’ailleurs à mon avis ça marchera pas, le moteur php n’aura probablement pas le droit d’allouer tout ça :)).

                  Waaagh_

                    #59379

                    @Fab1 : On est d’accord, de toutes façons, la somme de la taille des deux fichiers que tu pourras concaténer sera inférieure à la mémoire maximale allouée par script par le serveur (8Mo chez Free, moins la mémoire que tu utilises déjà avec d’autres variables). Je n’ai pas proposé la solution ultime, mais dans la plupart des cas de petits fichiers et/ou si tu ne veux pas réécrire le résultat dans un fichier, cela marche très bien.


                    @slobman
                    : ils ont du php5 chez Free? depuis quand?

                    fenrix

                      #59380

                      @ slobman

                      oui j’ai répondu trop vite, je voulais bien sur parler de file_put_contents

                      ça devrait pas être génant dans le contexte d’utilisation de mon script.

                      En fait je crée un fichier temporaire qui contient une dizaine de lignes (qui produisent un code HTML) en même temps que j’affiche à l’écran le résultat. En cas de validation, je rajoute ces lignes à la suite du fichier de données. D’ici là que j’arrive à 8Mo, il y a de la marge!!

                      PS: tout ça c’est pour une tite nouveauté sur Made in Pixel alors surveiller la page ;-)

                      fenrix

                        #59381

                        ça sert à quoi le @ devant fopen()?

                        slobman

                          #59382

                          Hip !!

                          Le @ devant une fonction la rend silencieuse. Aucun message d’erreur ne sera retourné dans la page html.

                          Mais tu peux quand même gérer le code retour. A utiliser quand tu fais des opérations qui risque de montrer des trucs privé (mot de passe de ta base de données, par exemple).

                          !! qiH

                        11 sujets de 1 à 11 (sur un total de 11)

                        • Vous devez être connecté pour répondre à ce sujet.

                        Forums AmigaOS, MorphOS et AROS Développement joindre des fichiers en PHP

                        Amiga Impact