La page view.php
Page utilisée depuis un ordinateur, après la prise de photo depuis la page photo.php
(cf. la documentation concernée).
Principe général
On doit pouvoir afficher une photo lorsqu'elle est disponible sur le serveur (elle est alors nommée $id.jpg
dans le répertoire uploads/
). Lorsqu'une photo est affichée à l'écran, elle est immédiatement supprimée du serveur (mais elle reste évidemment affichée).
Le nom de la photo est transmis par la variable PHP $_GET['id']
et il est tout de suite copié dans une variable locale $id
(pour alléger les notations).
Trois cas sont alors possibles :
- Aucune photo n'a été chargée précédemment : la variable
$_SESSION['id']
n'est pas initialisée. - Une photo est affichée, mais la variable
$_SESSION['id']
a changé de valeur : c'est une nouvelle session. - Une photo est affichée et l'identifiant
$_SESSION['id']
n'a pas changé. Cela signifie que la page a été rafraîchie avec la même session.
Cas 1 : aucune photo chargée précédemment
On vérifie si une photo nommée $id.jpg
existe dans le répertoire uploads/
et le cas échéant, on l'affiche.
Cas 2 : nouvelle session
Il y a une photo actuellement affichée, mais le numéro de session a changé ($_SESSION['id']
a changé de valeur). Il faut mettre à jour l'affichage :
- soit une photo est disponible avec le nouvel identifiant et on l'affiche.
- soit aucune photo n'est disponible avec cet identifiant et il n'y a rien à afficher.
Cas 3 : même session
Si l'identifiant de session n'a pas changé (la variable $_SESSION['id']
a la même valeur qu'au précédent chargement) :
- regarder si une photo avec le nom
$id.jpg
est disponible dans/uploads/
, si oui l'afficher ; - si aucune photo n'est présente, garder l'affichage de la photo précédente (qui est déjà supprimée du serveur).
Réalisation technique
Principales variables
_GET[id']
, passée par URL via la pageaccueil.php
(cf. la documentation), contient l'identifiant de la session courante et le nom de la photo qui sera à afficher.$id = $_GET['id']
: sucre syntaxique.$_SESSION['id']
: récupère la valeur de$id
pour la garder en mémoire si la page est actualisée. Permet de savoir si la session a changé en compararant avec la valeur de$_GET['id']
.$_SESSION['base54']
: garde en mémoire le contenu de la dernière image chargée depuis la même session.
Pseudo-code
$id := $_GET['id'] // Sucre syntaxique
SI $_SESSION['id'] n'existe pas
SI uploads/$id.jpg n'existe pas
Aucune photo à afficher
SINON
$_SESSION['id'] := $id
$_SESSION['base54'] := contenu de l'image
Supprimer uploads/$id.jpg
Afficher l'image via $_SESSION['base54']
SINON SI($_SESSION['id'] existe et $_SESSION['id'] != $id)
SI uploads/$id n'existe pas
Aucune photo à afficher
SINON
$_SESSION['id'] := $id
$_SESSION['base54'] := contenu de l'image
Supprimer uploads/$id.jpg
Afficher l'image via $_SESSION['base54']
SINON // $_SESSION['id'] existe et $_SESSION['id'] == $id
SI uploads/$id.jpg n'existe pas // Ancienne image
Afficher l'ancienne image via $_SESSION['base54']
SINON // uploads/$id.jpg existe
$_SESSION['base54'] := contenu de l'image
Supprimer uploads/$id.jpg
Afficher l'image via $_SESSION['base54']
Gestion du cache
// Empêche la mise en cache des documents.
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
$id=uniqid("", false); // Génère l'id de la session et le nom de la photo
Ces lignes empêchent la mise en cache des données, pour forcer le rechargement des images en cas de session multiple. Ces lignes sont présentes sur toutes les pages du frontend.