Afficher la date de dernière mise à jour
Voila un truc que je qualifierai de pédagogique,
utile et qui peut servir à tout le monde. Ce qu'il y a de bien
en PHP, c'est q'en définitive, si on veut afficher la date de dernière
mise à jour de sa page dans les normes Française qui nous
sont si chères, alors que les serveurs "tournent" sous
des systèmes étrangers la pluspart du temps Américains
(et pourquoi pas...), rien que cette petite chose là va nous faire
apprendre mille trucs très sympas. On dirait pas comme ça
hein ? Et pourtant... Vous allez voir. Accrochez-vous. C'est parti. NOTA à l'intention des puristes et des experts : Il y a une méthode bien plus courte (je sais), mais ceci est un exercice pédagogique destiné à apprendre plein de choses en faisant des trucs utiles. Donc, prenons le comme il est... Par avance merci. |
En théorie, rien de plus facile. Il suffit
d'aller chercher la date de dernière mise à jour (date du
dernier enregistrement du document sur le serveur) et de l'afficher. Pas bête hein ? Oui, mais. Parce qu'il y a toujours un "mais". Cette date, n'est accessible que si l'on connaît le nom du document. Vous me direz : ben on le connaît puisque c'est nous qui l'avons écrit et placé sur le serveur. Et je vous répondrais : oui, bien sûr, mais si on s'y prend comme ça, on devra écrire un programme pour chaque page de notre site puisque toutes les pages portent un nom différent. Il faudra au moins "passer" à notre fonction le nom du document. Ce qui fait une modif (minime, j'en conviens, mais une modif quand même) dans chaque page. Moi, ce que je veux, c'est écrire une fonction autonome qui n'a besoin de personne pour travailler, qui se débrouile toute seule, quelque soit le nom de mon document (la page sur le serveur). J'ai pas envie de m'embêter à devoir penser à mettre ce nom dans chaque page lors de l'appel de ma fonction. En plus, comme je me connais, tête en l'air comme je suis, je vais oublier les trois quart du temps et ça fera désordre. Je veux faire un simple "copier/coller" facile, pas cher et tout simple. Au besoin, et c'est même encore mieux, un appel à un programme exerne, ce qui me fait juste une instruction (toujours la même) dans chaque page. Ca, je peux en faire un modèle et le tour est joué. C'est d'ailleurs ce que j'ai fait pour ce site. Quand vous me connaîtrez mieux, vous verrez comme je suis feignant. La loi du moindre effort. Voila une chose qui me plaît. D'abord, un bon informaticien est avant tout un cossard né. Ben c'est vrai quoi. Si on était courageux, on ferait pas travailler les machines à notre place. Pas vrai ? Dans ce sens, on peut dire que je suis un "excellent" informaticien. |
Tout d'abord, il faut connaître le nom du fichier dont on veut
relever la date de dernière mise à jour. Il se trouve
que dans les variables natives proposées par PHP, le nom du fichier
en cours d'exécution n'est pas accessible directement. Oui, je
sais, ça paraît bizare, mais je vous promet que c'est vrai.
On trouve ce nom dans diverses variables natives ou d'environement,
mais toujours avec son chemin d'accès stipulé d'une mainière
différente selon la variable concernée. 1) Prendre une chaîne de caractères dans une variable native ou d'environement qui contient le nom du fichier en cours d'exécution. Pour ça, nous prendrons la variable [PHP_SELF] de $_SERVER. Nous écrirons : $renspage = $_SERVER['PHP_SELF'] ; Ce qui nous donnera (pour cette page) la chaîne de caractères
suivante : 2) Pour plus de comodité, nous allons exploser (hé oui) cette chaîne en tronçons et mettre chaque tronçon dans les postes d'une variable de type tableau. Nous utiliserons pour ça la fonction explode() dont vous pouvez aller voir la description à la page concernée. Justement, cette fonction permet d'exploser une chaîne de caractères en la tronçonnant selon le caractère de séparation que nous lui indiquons. Ici, le "/" me paraît parfait, non ? Nous écrirons donc : $TableChaine = explode("/", $renspage) ; Ce qui nous donnera le résultat suivant (toujours pour cette page) :
La table $TableChaine possède maintenant le contenu suivant : Là, on voit nettement que le nom du fichier est dans le dernier poste de la table. 3) Il ne nous reste plus qu'à l'extraire en utilisant la fonction spécialisée qui justement permet de lire le dernier poste d'une variable de type tableau : end(), dont vous trouverez la description à la page concernée. Nous écrirons donc : $NomFichier = end($TableChaine) ; Ce qui donnera le résultat suivant pour la page en cours : La variable $NomFichier contient : phpAffDateDerMaj.php et c'est bien ce que nous voulions. |
Bien ! Maintenant que nous tenons enfin le nom de ce fichu fichier
(notez bien que ce petit programme parviendra à relever le nom
de n'omporte quel fichier dans lequel il sera inclu), le travail est
loin d'être fini. En premier lieu, il nous faut sa date de dernière
mise à jour. Ici, ce sera la date à laquelle il a été
enregistré pour la dernière fois sur le serveur. Vous
me direz, ça ne veut pas dire qu'il a été modifié
depuis la dernière fois... Je sais, mais c'est à vous
de gérer l'enregistrement de vos fichiers sur le serveur. Ecrivons : $DateDerMaj = filemtime($NomFichier) ; cequi nous donne le résutlat suivant : La variable $DateDerMaj contient : 1089302883 Ben dites donc... Ca en fait des secondes hein ?
|
Il nous faut maintenant formater la date d'une manière lisible par nous, pauvres humains, autrement qu'en nombre de secondes depuis le premier janvier 1970. Il existe pour ça une fonction, la fonction strftime(), dont vous trouverez la description à la page concernée. Comme vous le savez certainement déjà, je suis un maniaque
de l'ordre et de la méthode (du moins pour l'apprentissage) et
je vais vous proposer (même vous conseiller) d'isoler chacun des
éléments de date dont nous aurons besoin pour formater
notre sortie definitive. Que nous faut-il ? La page sur la fonction strftime() nous donne tout ce dont nous avons besoin.Du moins tout ce dont nous avons besoin pour avoir accès à ces paramètres. - Le jour de la semaine : $JourSemaine = strftime("%w",
$DateDerMaj) ; Continuons : $Jour= strftime("%d", $DateDerMaj)
; - Le nom du mois : $Mois = strftime("%m", $DateDerMaj)
; - L'année sur quatre chiffrres $Annee= strftime("%Y", $DateDerMaj)
; Nous avons donc maintenant quasiment tout ce dont nous avons besoin. Ou presque... |
Il ne nous reste plus qu'à mettre tout ça en forme d'une
manière lisible et en français bien entendu. Pour transformer un "07" en "7", il faut d'abord tester si le premier caractère est un "0" puis, si c'est le cas, extraire de la chaîne de caractères "07" (par exemple) la sous-chaîne qui commence en 1 et qui à 1 caractère de long. Pour faire ça, nous écrirons le programme suivant : if ($Mois{0}
== "0") { // debut if Ce qui donne comme résultat : Maintenant, nous avons vraiment tous les ingrédients de base. Il nous reste à créer les tables de correspondances entre les numéros des jours de la semaine et leurs noms, et celle des numéros des mois et leurs noms le tout en français. Après être allé voir la leçon sur les variables de type tableau, vous savez le faire. Nous écrirons donc : // Table des jours En écrivant ça, nous aurons deux tables
qui sont structurées de la mainère suivante
et la table des mois contient :
Notez bien que nous avons soigneusement évité de remplir le poste 0 de la table des mois, puisque le format %m renvoie le numéro du mois avec 1 pour janvier. Nous avons donc ainsi directement accès aux libellés des jours de la semaine et des mois en direct à partir des valeurs que nous avons isolées auparavant. Il nous reste juste maintenant (c'est vrai cette fois-ci) à mettre la chaîne de caractères de sortie en forme pour obtenir le résultat recherché. Nous écrirons donc : echo "Dernière
mise à jour effectuée le : $TableJours[$JourSemaine]
$Jour $TableMois[$Mois]
$Annee" ; Dernière mise à jour effectuée le : Jeudi 08 juillet 2004 Vous voyez, ça n'était pas bien difficile. Et en plus, nous avons appris plein de choses fort intéressantes. |
Ce cours est enseigné par Philippe
Médan
dans le cadre de la formation des professionnels de l'INTERNET.
au CREFAC
, 14 rue Scandicci, 93000 Pantin. Tél. : 01 48 46 51 99
au GITA-GRETA , Lycée
Technologique Diderot 61, rue David D'Angers 75019 Paris Tél. : 01
40 40 36 27
au CESI à l'Ecole
des ingénieurs, 116 Av Aristide Briand, BP 57, 92224 Bagneux CEDEX
Tél. : 01 45 36 70 00
© Philippe Médan 1999-2003. Tous droits de reproduction réservés pour tous pays.