simple
Par Benot CRAUET (Kermi)
www.openclassrooms.com
2/10
Sommaire
Sommaire ........................................................................................................................................... 2
Un systme de cache simple ............................................................................................................. 3
Prparation du script ......................................................................................................................................................... 3
Cration du fichier .cache ........................................................................................................................................................................................... 3
Q.C.M. ............................................................................................................................................................................... 8
Partager ....................................................................................................................................................................................................................... 9
www.openclassrooms.com
Sommaire
3/10
Par
Prparation du script
Ralisation du script
Q.C.M.
Prparation du script
Nous allons commencer par prparer notre script.
En fait, je vais tre franc avec vous : il ne vous servira rien Il sera en revanche trs utile PHP !
PHP va s'en servir pour stocker des informations temporaires (ici, le message du livre d'or).
www.openclassrooms.com
4/10
Sur votre site ne s'affichera que le texte contenu dans le fichier, et non le texte issu de la requte SQL qui rcupre les
informations dans la base de donnes.
Cette requte ne s'effectuera que ponctuellement. Dans notre exemple, la requte ne s'excutera qu'une seule fois toutes les
minutes grce notre systme de cache. C'est un gain norme de performance, et l rside tout son intrt !
Mais, mais ! Comment je fais, moi, si je veux que le message soit affich en permanence ?
Ralisation du script
Nous avons tout prpar comme il faut !
Nous avons cr notre fichier .cache et nous allons maintenant nous en servir par le biais de PHP.
Nous allons donc commencer par vrifier l'anciennet du fichier. Pour cela, nous allons utiliser la fonction filemtime(). C'est une
fonction qui renvoie le timestamp de la date de dernire modification d'un fichier.
Nous allons ensuite, partir du timestamp actuel (rcupr grce la fonction time()) et partir de celui de la dernire
modification du fichier cache, calculer le nombre de secondes coules depuis la dernire modification de notre fichier. Si a fait
plus de 60 secondes, on mettra jour le cache.
Pour cela, une simple soustraction suffit :
Code : PHP
<?php
// On soustrait du timestamp actuel celui de la dernire
modification pour obtenir le nombre de secondes coules depuis la
dernire modification
$modif_ago = time() - filemtime('cache/livre_or.cache');
?>
www.openclassrooms.com
5/10
Nous n'avons pas besoin de else, car nous n'avons rien d'autre faire si le fichier est assez rcent.
Nous allons maintenant nous occuper de la mise jour de notre fichier.
Pour cela, nous devons tout d'abord rcuprer un message alatoirement dans la base de donnes et exporter les donnes :
Code : PHP
<?php
$select_message_aleatoire = mysql_query('SELECT * FROM livre_or
ORDER BY RAND() LIMIT 1'); // On slectionne un message
alatoirement
$infos_message = mysql_fetch_array($select_message_aleatoire);
?>
Dans ce code, les mots cls ORDER BY RAND() permettent d'organiser tous les messages alatoirement, et le mot cl
LIMIT 1 permet la slection d'un seul message dans cette liste.
tape suivante : nous devons rdiger un code qui met jour le fichier.
Nous utiliserons fopen() avec l'option w+.
Cette option permet de raliser plusieurs choses.
Elle positionne le pointeur de fichier 0 automatiquement (comme si elle remettait votre souris au dbut d'un fichier texte).
Nous n'avons donc pas besoin d'utiliser la fonction fseek().
Autre avantage : nous n'avons pas besoin d'effacer le contenu du fichier avant d'y crire quoi que ce soit, car cette
option rduit automatiquement la taille du fichier 0 (elle efface donc son contenu).
Enfin, par mesure de prvention, le fichier sera cr automatiquement si jamais un jour il est supprim par mgarde. Cette
option est reprsente par le + de w+.
Nous allons galement utiliser la fonction fwrite(), qui crit dans le fichier ; et pour finir, fclose() qui ferme la connexion au
fichier.
Code : PHP
<?php
$select_message_aleatoire = mysql_query('SELECT * FROM livre_or
ORDER BY RAND() LIMIT 1'); // On slectionne un message
alatoirement
$infos_message = mysql_fetch_array($select_message_aleatoire);
// On fait un stripslashes sur toutes les entres de l'array
$infos_message, la fonction array_map() permettant d'effectuer une
fonction sur toutes les entres d'un array. Ici, la fonction
stripslashes() sera donc effectue sur toutes les informations que
l'on a rcupres grce la requte SQL
array_map('stripslashes', $infos_message);
// On cre notre code xHTML
$xHTML = 'Par <strong>' . $infos_message['pseudo'] . '</strong> :<br
/>
"<em>' . nl2br($infos_message['message']) . '</em>"';
// On enregistre notre code dans le fichier...
// On va commencer par ouvrir le fichier en w+
$fichier = fopen('cache/livre_or.cache', 'w+');
/* Rappel : l'option w+ ne ncessite pas le replacement du
pointeur
ni l'effacement du fichier. */
// On crit le code xHTML dans le fichier
fwrite($fichier, $xHTML);
www.openclassrooms.com
?>
6/10
www.openclassrooms.com
7/10
// On l'affiche
echo $message_aleatoire;
?>
Et voil !
Votre code est entirement fini !
Voici quoi devrait ressembler votre code prsent :
Code : PHP
<?php
// On soustrait du timestamp actuel celui de la dernire
modification pour obtenir le nombre de secondes coules depuis la
dernire modification
$modif_ago = time() - filemtime('cache/livre_or.cache');
if($modif_ago > 60) { // SI le fichier a t modifi il y a plus
d'une minute
$select_message_aleatoire = mysql_query('SELECT * FROM livre_or
ORDER BY RAND() LIMIT 1'); // On slectionne un message
alatoirement
$infos_message = mysql_fetch_array($select_message_aleatoire);
// On fait un stripslashes sur toutes les entres de
l'array $infos_message, la fonction array_map() permettant
d'effectuer une fonction sur toutes les entres d'un array. Ici, la
fonction stripslashes() sera donc effectue sur toutes les
informations que l'on a rcupres grce la requte SQL
array_map('stripslashes', $infos_message);
// On cre notre code xHTML
$xHTML = 'Par <strong>' . $infos_message['pseudo'] .
'</strong> :<br />
"<em>' . nl2br($infos_message['message']) . '</em>"';
// On enregistre notre code dans le fichier...
// On va commencer par ouvrir le fichier en w+
$fichier = fopen('cache/livre_or.cache', 'w+');
/* Rappel : l'option w+ ne ncessite pas le
replacement du pointeur
ni l'effacement du fichier. */
// On crit le code xHTML dans le fichier
fwrite($fichier, $xHTML);
fichier
}
www.openclassrooms.com
8/10
Q.C.M.
Le premier QCM de ce cours vous est offert en libre accs.
Pour accder aux suivants
Connectez-vous Inscrivez-vous
quoi sert un systme de cache ?
Quelle option permet de crer un fichier s'il n'existe pas dj, de le vider, et enfin d'y crire ?
r.
w+.
w.
r+.
Code : PHP
<?php
// On ouvre le fichier
fopen('monfichier.txt', 'w+');
// On crit dans le fichier
fwrite($monfichier, 'Hello world !');
// On ferme le fichier
fclose($monfichier);
?>
Il plante.
Rien.
Il crit Hello world ! dans le fichier monfichier.txt.
Correction !
Statistiques de rponses au Q CM
www.openclassrooms.com
9/10
Partager
Ce tutoriel a t corrig par les zCorrecteurs.
www.openclassrooms.com