Pour les exemples, nous utiliserons le fichier "commentaires.txt" du dossier test_fichiers.

Si vous ne voyez pas le dossier test_fichiers et le fichier commentaires.txt, ou si vous voulez le ré-initialiser utilisez ce script.

La fonction fwrite() permet d'écrire du contenu dans un fichier.

Le fichier doit être ouvert en mode append : nous voulons ajouter du contenu à la fin du fichier. La valeur du paramètre type d'opération sera a dans l'appel de la fonction fopen(). Si le fichier n'existait pas, la fonction tenterait de le créer. Si le fichier peut être ouvert (ou créé), la fonction renvoie un pointeur sur la ressource (le fichier physique).

Exemple : écrire dans un fichier
<?php ob_start(); require('bib_fonctions.php'); htmlDebut('Ecrire dans un fichier'); $nom = 'test_fichiers/commentaires.txt'; $zones = array(); $zones[] = 'Piat'; $zones[] = 'francois.piat@univ-fcomte.fr'; $zones[] = date('d/m/Y'); $zones[] = "C'est mon commentaire"; $enreg = implode('|', $zones); // Si le fichier n'est pas vide, l'enregistrement // commence par un séparateur de ligne. Les guillemets // doubles sont obligatoires pour que le \n soit // bien interprété. if (filesize($nom) > 0) { $enreg = "\n$enreg"; } // ouverture du fichier en mode append $fichier = fopen($nom, 'a'); // Ecriture de l'enregistrement en fin de fichier fwrite($fichier, $enreg); // Fermeture du fichier fclose($fichier); htmlInfo('Fichier écrit'); echo '<a href="', $nom, '" target="_blank">', 'la preuve</a>'; htmlFin(); ?>

On peut facilement réaliser une interface d'affichage et de saisie pour les commentaires. On utilisera les techniques déjà vue dans le chapitre "Web et PHP" et "MySQL" pour faire un formulaire en auto-soumission, avec vérification de la saisie, et lecture / écriture du fichier commentaires.txt (à la place d'une table de base de données).

Exemple : interface de saisie / affichage
<?php ob_start(); require('bib_fonctions.php'); $nomFichier = 'test_fichiers/commentaires.txt'; $zones = array('txtNom' => '', 'txtMail' => '', 'txtCom' => ''); $errs = array(); htmlDebut('Saisie / affichage des commentaires'); // Phase de soumission du formulaire // -> vérification de la saisie // -> si OK : ajout dans le fichier // -> sinon réaffichage du formulaire if (isset($_POST['btnSubmit'])) { $errs = verifierForm(); if (count($errs) == 0) { ajouterComment($nomFichier); } else { $zones = $_POST; } } // Lecture du fichier et affichage des commentaires $enregs = @file($nomFichier); $iMax = count($enregs); for ($i = 0; $i < $iMax; $i++) { $champs = explode('|', $enregs[$i]); htmlInfo("{$champs[0]} a écrit le {$champs[2]}"); echo $champs[3]; } // Affichage du formulaire de saisie htmlInfo('Votre commentaire :'); echo '<form method="post" ', 'action="', $_SERVER['PHP_SELF'], '" >'; echo '<label>Nom *</label>', '<input type="text" name="txtNom" ', 'value="', $zones['txtNom'], '">'; if (isset($errs['txtNom'])) { echo '<br>', $errs['txtNom']; } echo '<label>Adresse mail</label>', '<input type="text" name="txtMail" ', 'value="', $zones['txtMail'], '">'; echo '<label>Commentaire *</label>', '<textarea name="txtCom">', $zones['txtCom'], '</textarea>'; if (isset($errs['txtCom'])) { echo '<br>', $errs['txtCom']; } echo '<p><input type="reset" name="btnReset" ', 'value=" Effacer ">', '<input type="submit" name="btnSubmit" ', 'value="Envoyer">', '</p></form>'; htmlFin(); //-------------------------------------------------------- /** * Vérification des zones de saisie. * * @return array Tab. assoc. zone => msg erreur */ function verifierForm() { $errs = array(); foreach ($_POST as $cle => $val) { $val = trim(strip_tags($val)); $_POST[$cle] = str_replace('|', '', $val); } $long = strlen($_POST['txtNom']); if ($long < 2) { $errs['txtNom'] = '2 caractères minimum'; } elseif ($long > 30) { $errs['txtNom'] = '30 caractères maximum'; } if (strlen($_POST['txtCom']) < 10) { $errs['txtCom'] = '10 caractères minimum'; } return $errs; } //-------------------------------------------------------- /** * Ajouter un commentaire dans le fichier * @param string $nom nom du fichier */ function ajouterComment($nom) { $zones = array(); $zones[] = $_POST['txtNom']; $zones[] = $_POST['txtMail']; $zones[] = date('d/m/Y'); $zones[] = nl2br($_POST['txtCom']); $enreg = implode('|', $zones); if (filesize($nom) > 0) { $enreg = "\n$enreg"; } $fichier = fopen($nom, 'a'); fwrite($fichier, $enreg); fclose($fichier); } ?>