|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PHP - Les fichiersLa gestion des fichiers avec PHPAvec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier est repérée par une variable, indiquant l'état du fichier et que l'on peut passer en paramètre aux fonctions spécialisées pour le manipuler. La fonction fopen()La fonction de base est la fonction fopen(). C'est elle qui permet d'ouvrir un fichier, que ce soit pour le lire, le créer, ou y écrire. Voilà sa syntaxe : entier fopen(chaine nomdufichier, chaine mode); Le mode indique le type d'opération qu'il sera possible d'effectuer sur le fichier après ouverture. Il s'agit d'une lettre (en réalité une chaîne de caractères) indiquant l'opération possible :
Voici un tableau récapitulant l'ensemble des modes de fichiers possibles :
Voici des exemples d'utilisations possibles de cette fonction : $fp = fopen("../fichier.txt","r"); //lecture //écriture depuis début du fichier $fp = fopen("ftp://phpfrance.com/pub/fichier.txt","w"); //écriture depuis fin du fichier $fp = fopen("http://igalaxie.com/fichier.txt","a");De plus, la fonction fopen permet d'ouvrir des fichiers présents sur le web grâce à leur URL. Voici un script permettant de récupérer le contenu d'une page d'un site web : <? $fp = fopen("http://www.commentcamarche.net","r"); //lecture du fichier while (!feof($fp)) { //on parcourt toutes les lignes $page .= fgets($fp, 4096); // lecture du contenu de la ligne } ?> Il est généralement utile de tester si l'ouverture de fichier s'est bien déroulée ainsi que d'éventuellement stopper le script PHP si cela n'est pas le cas : <? if (!$fp = fopen("http://www.commentcamarche.net","r")) { echo "Echec de l'ouverture du fichier"; exit; } else { // votre code; } ?>
Lecture et écritureUne fois que le fichier a été ouvert avec le mode désiré, il est possible de lire son contenu et d'y écrire des informations grâce aux fonctions :
Ainsi, on utilise la fonction feof(), fonction testant si la fin du fichier n'a pas été atteinte, en tant que test de la boucle while. De cette façon, tant que la fin du fichier n'a pas été atteinte, on lit la ligne suivante du fichier... <? if (!$fp = fopen("fichier.txt","r")) { echo "Echec de l'ouverture du fichier"; exit; } else { while(!feof($fp)) { // On récupère une ligne $Ligne = fgets($fp,255); // On affiche la ligne echo $Ligne; // On stocke l'ensemble des lignes dans une variable $Fichier .= $Ligne; } fclose($fp); // On ferme le fichier } ?> Pour stocker des infos dans le fichier, il faut dans un premier temps ouvrir le fichier en écriture en le créant si il n'existe pas. On a donc le choix entre le mode 'w' et le mode 'a'. On préférera le second puisque le pointeur se trouve en fin de fichier (autrement dit on écrit à la suite de ce qui se trouve dans le fichier au lieu d'écraser le contenu existant éventuellement déjà). <? $fp = fopen("php_8_fichier.txt","a"); // ouverture du fichier en écriture fputs($fp, "\n"); // on va a la ligne fputs($fp, "$nom|$email"); // on écrit le nom et email dans le fichier fclose($fp); ?> Voici un petit script permettant de récupérer le titre d'une page Web (le texte compris entre les balises <TITLE> et </TITLE>). Il utilise les expressions régulières pour localiser le texte. <? $fp = fopen("http://www.commentcamarche.net","r"); //lecture du fichier while (!feof($fp)) { //on parcourt toutes les lignes $page .= fgets($fp, 4096); // lecture du contenu de la ligne } $titre = eregi("<title>(.*)</title>",$page,$regs); //on isole le titre echo $regs[1]; fclose($fp); ?> Les tests de fichiersPHP fournit de nombreuses fonctions permettant de faire des tests sur les fichiers pour connaître leurs propriétés. Voici la liste des fonctions des tests :
<? if (!is_dir("install")) { echo "Il ne s'agit pas d'un répertoire booléen is_executable(chaine Nom_du_fichier);La fonction is_executable() renvoie 1 si le fichier est exécutable, 0 dans le cas contraire booléen is_file(chaine Nom_du_fichier);La fonction is_file() renvoie 1 si il s'agit d'un fichier, 0 dans le cas contraire booléen is_link(chaine Nom_du_fichier);La fonction is_link() renvoie 1 si il s'agit d'un lien symbolique, 0 dans le cas contraire D'autres façons de lire et écrireDans certains cas, il peut être rébarbatif de devoir mettre en oeuvre les fonctions fopen() et fgets pour lire l'intégralité du contenu d'un fichier. Pour cette raison PHP fournit des fonctions supplémentaires permettant de faire directement certaines opérations. La fonction file() permet de retourner dans un tableau l'intégralité
d'un fichier en mettant chacune de ces lignes dans un élément du tableau (rappel :
le premier élément d'un tableau est repéré par l'indice 0).
Tableau file(chaine nomdufichier); L'exemple suivant montre comment parcourir l'ensemble du tableau afin d'afficher le fichier. <? $Fichier = "fichier.txt"; if (is_file($Fichier)) { if ($TabFich = file($Fichier)) { for($i = 0; $i < count($TabFich); $i++) echo $TabFich[$i]; } else { echo "Le fichier ne peut être lu...<br>"; } } else { echo "Désolé le fichier n'est pas valide<br>"; } ?> La fonction fpassthru() permet d'envoyer le contenu du fichier dans la fenêtre du navigateur. La syntaxe de cette fonction est la suivante : booléen fpassthru(entier etat);Cette fonction permet en réalité d'envoyer le contenu du fichier à partir de la position courante dans le fichier, c'est-à-dire qu'il est possible par exemple de lire quelques lignes avec fgets(), puis d'envoyer le reste au navigateur... Le script suivant permet de parcourir tous les fichiers HTML contenus dans votre site et d'en afficher l'arborescence : <HTML> <HEAD> <TITLE>Affichage de l'arborescence</TITLE> </HEAD> <BODY> <? function ScanDir($Directory){ if (is_dir($Directory) && is_readable($Directory)) { if($MyDirectory = opendir($Directory)) { while($Entry = readdir($MyDirectory)) { if (is_dir($Directory."/".$Entry)) { if (($Entry != ".") && ($Entry != "..")) { echo "<li><b>Repertoire</b>: $Directory/$Entry</li>\n"; echo "<ul>"; ScanDir($Directory."/".$Entry); echo "</ul>"; } } else { echo "<li><b>Fichier</b>: $Directory/$Entry </li>\n"; if (eregi("(\.html)|(\.htm)",$Entry)){ $MetaTags = get_meta_tags($Directory."/".$Entry); } } } closedir($MyDirectory); } } } $open_basedir="."; echo "<ul>"; ScanDir("."); echo "</ul>"; ?> </BODY> </HTML> Pour plus d'informations PHP France Trucs & astuces pertinents trouvés dans la base de connaissances
Discussions pertinentes trouvées dans le forum
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||