Séance 10 : Export format text/csv
Introduction
Ce TD/TP s’intéresse à la manipulation de fichier, de type texte. Nous nous focaliserons sur la manipulation de fichiers texte (txt) standard et des fichiers csv qui pourront par exemple être exploités dans un tableur de type excel.
Pour pouvoir manipuler les fichiers, vous devez vous assurer de mettre les droits en écriture et execution sur votre répertoire.
Fichier texte
La manipulation d’un fichier comporte trois étapes :
Ouvrir le fichier (s’il existe)
Exploiter le fichier (lecture et/ou écriture)
Fermer le fichier
Ce qui se traduit pour les étapes 1 et 3 par le code ci-dessous:
Le second argument de la fonction fopen indique de quelle manière il faut ouvrir le fichier. Le tableau ci-dessous vous présente les différents mode dans lequel un fichier peut être ouvert.
Mode
Explications
r
Ouvre le fichier en lecture seule. Cela signifie que vous pourrez, seulement lire le fichier.
r+
Ouvre le fichier en lecture et écriture. Vous pourrez non seulement lire le fichier, mais aussi y écrire (on l’utilisera, assez souvent en pratique)
a
Ouvre le fichier en écriture seule. Mais il y a un avantage : si le fichier n’existe pas, il est automatiquement créé.
a+
Ouvre le fichier en lecture et écriture. Si le fichiers n’existe pas, il est créé automatiquement. Attention : le répertoire doit avoir un CHMOD à 777 dans ce cas ! A noter que si le fichier existe déjà, le texte sera rajouté à la fin.
Tous les mode d'ouverture d'un fichier sont décrit ici : https://www.php.net/manual/fr/function.fopen.php
Si votre fichier.txt se trouve dans un répertoire, vous devez modifier la ligne 3 avec le bon chemin. Vous n’êtes absolument pas obligés de donner l’extension .txt à votre fichier. Vous pouvez l’appeler comme vous voulez : exemple.cpt, exemple.num, ou même exemple tout court. En pratique vous pouvez écrire n’importe quelle extension, mais pour pouvoir l’ouvrir par la suite il faut soit que l’extension n’existe pas (dans ce cas on ouvrir le fichier avec un éditeur de texte), ou alors que l’extension soit en fait un fichier texte (par exemple le html, un fichier ini ou encore du csv...).
Pour lire un fichier, il existe deux méthodes : soit ligne par ligne (fgets), soit caractère par caractère (fgetc).
Lire
L’instruction ci-dessus permet donc de lire la première ligne de votre fichier (et uniquement celle-là). Pour parcourir tout le fichier, il faut faire une boucle qui va parcourir l’ensemble des lignes.
Dans le code ci-dessus, la boucle while regarde si on est à la fin du fichier (feof permet de détecter la fin du fichier). La ligne fgets, va automatiquement lire les ligne de manière successive à chaque itération de la boucle. Un peu comme le fetch dans la base de données du TD précédent.
Ecrire
Pour écrire il n’existe qu’une méthode : fputs.
L’ajout se fait là où se trouve le curseur : en fin de ligne si on à lu une ligne, aprés une caractére, si on a fait un fgetc. Pour repositionner le curseur, on peut utiliser :
Qui va replacer le curseur au caractère 0, c’est à dire au début du fichier.
Exercices
Lire un fichier texte
Télécharger le fichier ci-dessus
le mettre dans votre répertoire, vérifier les droits.
Ecrire un fichier qui va récupérer et afficher le contenu de ce fichier.
Ecrire un fichier texte
Ecrire un fichier php qui permet de générer un fichier txt contenant le texte de votre choix
fichier CSV
Lire
La manipulation d’un fichier csv est très similaire à un fichier texte, en effet, techniquement un fichier csv est un fichier texte. Cependant, le format CSV étant pratique à manipuler (notamment car il peut être utilisé dans une base de données, dans un tableur, ...), php propose de nombreuses fonctionnalités pour le manipuler.
Le code ci-dessous montre comment lire un fichier csv avec la méthode fgetcsv. Cette méthode prend 3 arguments :
la variable de fichier
la taille d’une ligne (souvent 1024)
le caractère de séparation (traditionnellement ; ou ,).
Lors de la lecture d’une ligne, la fonction fgetcsv renvoi un tableau, avec dans chaque case les "parties" entre les séparateurs. C’est comme cela que fonctionne votre import dans une base de données.
Ecrire
L'écriture se fait par l’intermédiaire de la fonction fputcsv, qui prend 3 paramètres :
le fichier
un tableau de données
le séparateur.
Cette fonction va transformer le tableau en une ligne de texte, où les éléments seront séparés par le séparateur.
Exercices
Lire un fichier csv
Télécharger le fichier ci-dessus
le mettre dans votre répertoire, vérifier les droits.
Ecrire un fichier qui va récupérer et afficher le contenu de ce fichier, sous forme d'un tableau HTML.
Ecrire un fichier csv
Ecrire un fichier csv, séparateur ”;” qui va contenir les données d'une table de votre base de données
Tester le fichier généré dans un tableur.
Forcer le téléchargement
Avec les méthodes précédentes, le fichier est créé, mais disponible uniquement sur le serveur. Il faut créer un lien () pour permettre à l'utilisateur de le télécharger. Cela peut être le comportement souhaité.
Cependant on pourrait aussi souhaité que le fichier se télécharge automatiquement. Pour cela, il faut envoyer au navigateur un "header" qui l'informe que l'on souhaite télécharger un fichier.
Le Header doit être la seule et uniquement chose envoyée au navigateur. S'il y a un autre header ou du texte envoyé avant, alors le contenu sera considéré comme du HTML et vous ne pourrez pas télécharger votre fichier
a envoyé une fois le fichier créé pourrait donc être :
La première ligne permet de dire qu'on envoie un fichier (sans préciser son type, on pourrait le faire)
La deuxième ligne précise le nom du fichier (peut être différent du nom réel)
Les lignes 3,4 et 5 permettent de gérer le cache
La ligne 6 permet d'associer le fichier existant sur le serveur en indiquant son chemin relatif à la page
La ligne 7 termine l'envoi du header.
Last updated