TP N° 5 : Gestion des fichiers - Toubkal-it

Transcription

TP N° 5 : Gestion des fichiers - Toubkal-it
TP N° 5 : Gestion des fichiers
Rappel :
L’utilisation d’un fichier se fait en trois phases :
•
•
Ouverture du fichier ; en fait, on établit la correspondance entre la désignation système du
fichier (disque, répertoire, nom) et une variable qui servira à désigner le fichier dans le
programme pour toutes les opérations qu’on fera sur lui. On annonce aussi si ou écrira sur
le fichier. En lecture, il faut que le fichier existe. En écriture, s’il existe déjà, il peut être
écrasé ; s’il n’existe pas il sera créé.
•
Utilisation proprement dite ; ce sont les lectures ou les écritures.
•
Fermeture du fichier. Cela brise l’association entre la variable de désignation et le fichier,
établie à l’ouverture. La variable se trouve libérée et peut donc être utilisée pour une autre
ouverture. Pour un fichier en écriture, cette phase est essentielle car elle donne lieu à
l’écriture effective des dernières données à écrire.
Ouverture du fichier
L’ouverture du fichier se fait par appel de la fonction fopen de la forme :
Variable = fopen(desfich, mode).
La variable est celle qui servira à désigner le fichier par la suite. Nous l’appelons $f dans la suite du
cours. Si l’ouverture s’est mal passée, $f a la valeur logique Faux, d’où un test de cette situation.
desfich est une chaine de caractères qui désigne le fichier pour le système (sur le serveur, c’est
donc le plus souvent une désignation de style Unix/Linux).
On peut avoir repertoire/sousrepertoire/nom.ext. Si le fichier est dans le même répertoire que
votre programme PHP, la désignation se réduit à nom.extension.
mode est un caractère qui indique ce qu’on fera avec le fichier. Voici les valeurs possibles.
Mode
Description
r
ouverture en lecture seulement
w
ouverture en écriture seulement (Si le fichier n’existe pas, il sera créé)
a
ouverture en écriture seulement avec ajout du contenu à la fin du fichier (Si le
fichier n’existe pas, il sera créé)
r+
ouverture en lecture et écriture
w+
ouverture en lecture et écriture (Si le fichier n’existe pas il sera créé)
a+
ouverture en lecture et écriture avec ajout du contenu à la fin du fichier (Si le
fichier n’existe pas, il sera créé)
Exemple :
$f = fopen('stat.txt', 'r') ; ouvre en lecture le fichier stat.txt qui est dans le même répertoire que le
script PHP qui contient l’instruction.
$site = "http://www.monsite.fr/" ;
$fname = $site."accueil.htm" ;
$f = fopen($fname,"w") or exit "ouverture impossible";
La désignation absolue est construite par concaténation et on prévoit l’arrêt du script en cas
d’échec (probablement dû à un problème de droit d’écriture).
Page 1 sur 4
Prof : M. LACHGAR
•
Les opérations
Dans ce qui suit, $f désigne la variable de manipulation du fichier (résultat de fopen), $fname
contient le nom complet du fichier (avec disque ou site et répertoire).
$a désigne une variable chaine, $t désigne un tableau.
Les fonctions les plus importantes :
$a = fgetc($f) ; permet de lire un caractère dans le fichier désigné par $f.
$a = fgets($f, longueur) ; permet de lire une chaîne dans le fichier désigné par $f. si longueur
n’est pas spécifiée, le défaut est 1024, mais si la ligne est plus longue elle sera lue. Il n’est utile de
fournir ce paramètre qui s’il y beaucoup de lignes dépassant 8 ko.
Exemple :
$f = fopen ('log.txt’, 'r’) ;
while (!feof($f)){
$t[ ] = fgets ($t);
}
fcolse ($f) ;
$t = file ($fname) ; lit le fichier texte, et met les lignes (avec leur retour-chariot) dans les
éléments successifs du tableau. Donc fait la même chose que l’exemple précédent.
$a = fread($f, longuer) ; permet de lire longueur de caractère et les stockes dans la variable
$a. si la longueur est plus grand que la taille du fichier, tout le fichier est lu. Avec les mémoires
très grands dont on dispose maintenant, il est extrêmement commode de lire tout le fichier et
d’analyser la chaine de caractère obtenue.
fwrite ($f, $a) ; permet d’écrire le contenu de la chaine $a dans le fichier indiqué.
Exemple :
$f = fopen ('log.txt','r’) ;
$a = fread($f, 32 000) ;
fclose ($f) ;
//Modification de la variable $a
$f = fopen ('log.txt','r’) ;
fwrite($f, $a) ;
fclose ($f) ;
•
Fermeture du fichier
fclose ($f) ; permet de fermer le fichier désigné par $f.
•
Fonctions annexe :
copy ($fname1, $fname2) ; copies le contenu du fichier 1 pour construire le fichier 2.
feof($f) ; revoie vari si on est à la fin du fichier.
file_exists ($fname) ; revoie vrai si le fichier indiqué existe.
filesize($f) ; renvoie la taille du fichier.
rename ($fname1, $fname2) ; renomme le fichier 1 avec le nom complet du fichier 2.
Page 2 sur 4
Prof : M. LACHGAR
TP :
Exercice 1 : Comptage de visite
Il peut être important pour un webmaster de mesurer la fréquence de visites de son site.
Travail à faire :
•
Ecrire un programme qui produit le comptage des visites ;
•
Le programme sera déclenché à l’arrivé du visiteur sur la page d’accueil. Ce
déclanchement peut être :
•
•
Explicite : le site présente un bouton à cliquer et demande au visiteur de
cliquer pour être compté, cette méthode est un peu obsolète ;
•
Implicite (discret et automatique) : le comptage est déclenché sans que le
visiteur en ait conscience.
Créer une page web permettant de consulter le résultat.
Exercice 2 : Gestion de bibliothèque
Nous allons traiter les aspects :

La page de formulaire;

Le prétraitement HTML 5 / JavaScript ;

Le traitement PHP;

Le fichier de mémorisation des données sur le serveur.

Nous traitons la gestion des livres d’une bibliothèque. Nos données seront dans une
page web formée d’un tableau de la forme :
Question 1 : créer le formulaire d’entrée d’un livre :
Question 2 : Après la validation le livre sera affiché dans le tableau HTML ci-dessus (voir
indication).
Exercice 3 : Statistiques des visites, statistiques des pages visitées
T.A 1 : Perfectionner le comptage des visites de l’exercice précédent pour en faire une véritable
statistique tenant compte de l’adresse IP du visiteur et de la date.
T.A 2 : proposer une solution présentant
différentes pages.
comment les visites se répartissent entre les
Page 3 sur 4
Prof : M. LACHGAR
Indication : Exercice 2
<?php
$genre = $_POST['genre'];
$auteur = stripslashes($_POST['auteur']);
$titre = stripslashes($_POST['titre']);
$msg = '';
if ($genre == '')
$msg .= '<br /> Genre';
if ($auteur == '')
$msg .= '<br /> Auteur';
if ($titre == '')
$msg .= '<br /> Titre';
if ($msg != '') {
echo '<h3> Donnée(s) manquante(s) </h3>' . $msg;
exit;
} else {
/* On li le fichier qui contiendra le tableau des livres; son contenu forme la variable $texte */
$f = fopen('biblio_0.htm', 'r');
$texte = fread($f, 32000);
fclose($f);
/* On rouvre le fichier en écriture; l'écriture sera faite une fois que $texte aura été modifiée;
Les données du nouveau livre vont être écrites juste devant </table>;
$pstb est la position de cette chaine;
$deb est la partie de $texte qui la précède;
$fin va de </table> à la fin du texte;
Ensuite, on insère la ligne du nouveau livre avec les balises <tr> et <td> voulues
*/
$f = fopen('biblio_0.htm', 'w');
$pstb = strpos($texte, '</table>');
$deb = substr($texte, 0, $pstb);
$fin = substr($texte, $pstb);
$texte = $deb . '<tr><td>' . $genre . '</td><td>' . $auteur;
$texte .= '</td><td>' . $titre . "</td></tr>\n" . $fin;
fwrite($f, $texte);
fclose($f);
echo '<h3> Entrée réussié </h3>';
}
?>
Page 4 sur 4
Prof : M. LACHGAR

Documents pareils