Retour d'un niveau
Retour à l'accueil
Les variables sont simples à utiliser, mais elles ne contiennent que des informations temporaires. La durée de vie d'une variable n'est en effet jamais très longue. Or, vous aurez certainement besoin sur votre site de stocker des informations définitivement.
Par exemple, il est impossible de stocker les messages d'un forum dans des variables… puisque celles-ci seront supprimées à la fin de l'exécution de la page !
Pour stocker ces informations longtemps, il faut les écrire sur le disque dur. Quoi de plus logique pour cela que de créer des fichiers ?
PHP permet justement d'enregistrer des données dans des fichiers sur le disque dur du serveur.
Pour que PHP puisse créer des fichiers, il doit avoir accès à un dossier qui lui en autorise la création. Il faut en effet donner le droit à PHP de créer et modifier les fichiers, sinon celui-ci ne pourra rien faire.
Pour créer ces droits, on dit en général qu'on doit modifier le CHMOD du fichier ou du dossier. C'est le nom de la commande qui permet de modifier les droits sous Linux.
Le CHMOD est un nombre à trois chiffres que l'on attribue à un fichier (par exemple 777).
Selon la valeur de ce nombre, Linux autorisera (ou non) la modification du fichier.
Le problème, c'est que Linux n'autorise généralement pas les modifications de fichiers par un script PHP. Or, c'est justement ce qu'on veut faire. Alors, comment va-t-on faire pour s'en sortir ? En modifiant le CHMOD, pardi !
Il va falloir passer par… votre logiciel FTP ! Oui, celui-là même qui vous sert à envoyer vos pages sur le web. En ce qui me concerne, j'utilise FileZilla (vous pouvez utiliser celui que vous voulez, la manipulation est quasiment la même).
En général, vous devriez avoir un menu « CHMOD » ou « Permissions de fichier » (comme moi). Cela devrait ouvrir une fenêtre qui ressemble à peu près à la figure suivante.
Et c'est là que se trouve la solution à tous nos problèmes ! Sans rentrer dans les détails parce qu'il n'est pas question de faire un cours sur Linux ici, voilà comment ça fonctionne : il y a trois types de personnes qui ont le droit de lire/modifier des fichiers.
Si vous rentrez 777 comme valeur pour le CHMOD, cela signifie que tous les programmes du serveur ont le droit de modifier le fichier, notamment PHP. Il faut donc rentrer 777 pour que PHP puisse modifier le fichier en question.
Vous pouvez aussi modifier le CHMOD d'un dossier. Cela déterminera si on a le droit de lire/écrire dans ce dossier. Cela vous sera notamment utile si vous avez besoin de créer des fichiers dans un dossier en PHP.
Avant de lire/écrire dans un fichier, il faut d'abord l'ouvrir.
Commencez par créer un fichier compteur.txt (par exemple). Envoyez-le sur votre serveur avec votre logiciel FTP, et appliquez-lui un CHMOD à 777 comme on vient d'apprendre à le faire.
Maintenant, on va créer un fichier PHP qui va travailler sur compteur.txt. Votre mission, si vous l'acceptez : compter le nombre de fois qu'une page a été vue sur votre site et enregistrer ce nombre dans ce fichier.
<?php // 1 : on ouvre le fichier $monfichier = fopen('compteur.txt', 'r+'); // 2 : on fera ici nos opérations sur le fichier... // 3 : quand on a fini de l'utiliser, on ferme le fichier fclose($monfichier); ?>
Il y a trois étapes à respecter :
Ici, on a créé le fichier avant, donc pas besoin d'utiliser a+.
Pour lire, on a deux possibilités :
Il faut indiquer à fgets() le fichier à lire.
On lui donne notre variable $monfichier qui lui permettra de l'identifier.
fgets() renvoie toute la ligne (la fonction arrête la lecture au premier saut de ligne).
Donc notre variable $ligne devrait contenir la première ligne du fichier.
Et si mon fichier fait quinze lignes, comment je fais pour toutes les lire ?
Il faut faire une boucle. Un premier fgets vous donnera la première ligne.
Au second tour de boucle, le prochain appel à fgets renverra la deuxième ligne, et ainsi de suite.
C'est un peu lourd, mais si on stocke assez peu d'informations dans le fichier, cela peut suffire.
Sinon, si on a beaucoup d'informations à stocker, on préfèrera utiliser une base de données (on en parlera dans la prochaine partie).
Pour l'écriture, on n'a qu'une seule possibilité : utiliser fputs().
Cette fonction va écrire la ligne que vous voulez dans le fichier.
<?php fputs($monfichier, 'Texte à écrire'); ?>
Toutefois, il faut savoir où l'on écrit le texte. En effet, le fonctionnement d'un fichier est assez étrange…
par-dessus l'ancienne, ce qui fait que l'ancien texte sera écrasé (remplacé par le nouveau).
Si vous faites un fputs juste après, il va écrire à la suite ! Pour éviter ça, on va utiliser la fonction fseek qui va replacer le curseur où l'on veut dans le fichier. En l'occurence, on va replacer le curseur au début du fichier en faisant :
fseek($monfichier, 0);
Notre curseur sera alors repositionné au début, voyez donc la figure suivante.
Si vous avez ouvert le fichier avec le mode 'a' ou 'a+', toutes les données que vous écrirez seront toujours ajoutées à la fin du fichier. La fonction fseek n'aura donc aucun effet dans ce cas.
?php $monfichier = fopen('compteur.txt', 'r+'); $pages_vues = fgets($monfichier); // On lit la première ligne (nombre de pages vues) $pages_vues++; // On augmente de 1 ce nombre de pages vues fseek($monfichier, 0); // On remet le curseur au début du fichier fputs($monfichier, $pages_vues); // On écrit le nouveau nombre de pages vues fclose($monfichier); echo '<p>Cette page a été vue ' . $pages_vues . ' fois !</p>'; ?>
Voici la description des quatre lignes du milieu (les plus importantes) :
Le fichier doit exister et contenir un nombre (tel que 0) pour que ce code fonctionne. De plus, si vous avez oublié de mettre un CHMOD à 777 sur le fichier compteur.txt, vous aurez l'erreur suivante : « Warning: fopen(compteur.txt): failed to open stream: Permission denied ». Ici, PHP essaie de vous dire qu'il n'a pas réussi à ouvrir le fichier car il n'a pas le droit d'écrire dedans. Il faut donc absolument mettre ce CHMOD si vous voulez pouvoir toucher au fichier !