Fichiers PHP
Manipulation de fichiers et dossiers en PHP
Manipuler les fichiers: fopen() et fread()
Nous supposerons que vous avez déjà un fichier "texte.txt". Pour ouvrir ce fichier, on utilise la fonction fopen() qui attend au minimum deux paramètres (le nom du fichier et le mode d'ouverture du fichier). Pour lire ce fichier - et l'afficher - on utilise la fonction fread() qui attend deux paramètres (le nom du fichier et la taille du fichier). La taille du fichier est obtenue avec la fonction filesize.
Exemple d'ouverture, de lecture et de fermeture d'un fichier<?php
$fichier = fopen('texte.txt', 'r');
$longueur = filesize("texte.txt");
$chaine = fread($fichier , $longueur);
echo nl2br($chaine);
fclose($fichier);
?>
Le paramètre 'r' de la fonction fopen permet d'ouvrir le fichier en lecture seule. On utilise la fonction nl2br() sur la variable $chaine pour reproduire les retours à la ligne du fichier texte.
Si on veut écrir dans texte.txt, on utilise la fonction fwrite() qui attend trois paramètres (le nom du fichier, la chaine et la longueur du fichier).
Exemple d'ecriture dans un fichier<?php
if ( $fichier = fopen('texte.txt', 'a') ) {
fwrite( $fichier, "\nEasy-Micro");
}
?>
Note sur ce script: Le paramètre 'a' de la fonction fopen permet d'ouvrir le fichier en ajout. Si le fichier existe, le contenu est conservé, sinon tentative de création. Le \n permet un retour à la ligne.
Les 2 exemples réunis<?php
// Ecriture
$fichier = fopen('texte.txt', 'a');
fwrite($fichier, chr(13)."\n"."Easy-Micro");
// retour à la ligne à l'écran, soit avec \n, soit avec chr(13)
// retour à la ligne dans le fichier texte : les deux sont nécessaire: \n et .ch(13)
// Lecture
$fichier = fopen('texte.txt', 'r');
$longueur = filesize("texte.txt");
$chaine = fread($fichier , $longueur);
echo nl2br($chaine);
fclose($fichier);
?>
Note : Un retour à la ligne à l'écran, est réalisé soit avec \n (pour le bloc note), soit avec chr(13) ou \r (pour WordPad). Pour un retour à la ligne dans un fichier texte : les deux sont nécessaire : \n et .ch(13). Qui peut être remplacée par la syntaxe \r\n
<?php
$fichier = file( 'http://www.easy-micro.com' );
while ( list( $num_ligne, $ligne ) = each( $fichier ) ) {
echo "Ligne $num_ligne: ".htmlspecialchars( $ligne ) . "<br>\n";
}
?>
Note sur ce script: Attention, fichier un peu long à ouvrir... Un script idéal pour afficher les numéros des lignes du code source d'un site web
Note:
◊ file : Lit le fichier et renvoie le résultat dans un tableau.
◊ list : permet de rassembler les variables (ici numéro et donnée) sous forme de tableau, pour les assigner en une seule ligne.
<?php
$taille = filesize("images/maphotos.jpg");
echo "Taille de ma photo : ".$taille." octets";
?>
Note : le fichier compteur.txt existe, il contient le chiffre 0 et ses droits d'accès sont à 777
<?php
$fichier = "compteur.txt";
//ouverture en lecture/ecriture
$openfichier = fopen($fichier,"r+");
//on récupère le chiffre et on ajoute 1
$ligne = fread($openfichier,1024)+1;
//on se replace au début (fseek modifie la position du pointeur de fichier)
fseek($openfichier,0);
//on écrit le nouveau chiffre
fwrite($openfichier,$ligne);
fclose($openfichier);
?>
Note sur ce script: Pour activer le compteur, on fait un include de ce fichier dans toutes les pages. Exemple: <?php include("appel_compteur.php");?>. Pour afficher le nombre, on fait un echo de la variable $ligne.
Manipuler les dossiers: opendir() et readdir()
Et enfin, voici un exemple de manipulation de dossier (et non pas de fichier):
Exemple de lecture du contenu d'un dossier (lit les noms des fichiers)<?php
$dir = opendir("images/marrakech");
while($fichier = readdir($dir)) {
if ($fichier != ".." && $fichier != "." && $fichier != "") {
echo $fichier."<br>";
}
}
closedir($dir);
?>
Note sur ce script: Est utilisé ici opendir et readdir qui permettent de manipuler des dossiers. Le "if" ci-dessus permet d'éviter de lire le . et le .. représentant les dossiers de niveau supèrieur.Si l'on veut ouvrir le répertoire courant (celui dans lequel on se trouve), saisir : $dir = opendir(".");
Exemple d'affichage dynamique de photos<?php
// ouverture dossier
$dir = opendir("images");
while($fichier = readdir($dir)) {
if ($fichier != ".." && $fichier != "." && $fichier != "") {
echo '<a href="images/'.$fichier.'"><img src="images/'.$fichier.'" alt="Photo de plage"></a> ';
}
}
closedir($dir);
?>