Salut,
J'avais envie de faire une petite fonction qui gère l'affichage d'une image.
L'idée était de ne pas pouvoir appeler l'image directement, mais de passer forcément par un script. La raison était simple : permettre de limiter l'affichage au site web auquel elle appartient, gérer des permissions en fonction de critères divers et variés (que je n'ai pas implémentés et qui peuvent l'être grâce à une fonction de callback.
Je sais bien qu'on peut obtenir la même chose avec un fichier .htaccess, mais... là, on peut gérer les droits en fonction d'une session php. Par ailleurs, cette source n'empêche évidemment pas l'utilisateur d'enregistrer l'image sur son disque dur, hein...
Au final, j'ai fait une classe en PHP5, ce qui permet :
- d'avoir une fonction de callback pour gérer les autorisations (adresse IP, ses
- d'étendre la classe pour lui apporter des fonctionnalités en plus (rajouter un copyright, par exemple)
- de récupérer le contenu de l'image sans pour autant l'afficher (sous forme d'une chaine, je sais, c'est crade)
- d'avoir un code propre (c'est peut-être idiot ce que je dis) avec des Exceptions
- d'éviter les doublons dans le code
- de se passer de .htaccess sur Windows...
Le code est documenté au standard phpDoc et je pense assez clair, mais je vous fait quand même un petit topo.
Les méthodes publiques sont :
Setters :
- set_auth_handler : définit la fonction qui gère les autorisations. Si elle n'est pas utilisée, la fonctionnalité est désactivée.
- set_directory : définit le répertoire par défaut où piocher les images (peut être spécifié explicitement pour chaque image, si besoin)
- set_referer_check : même principe que session_referer_check. Il s'agit d'une sous-chaine recherchée dans le referer HTTP. Si elle n'est pas utilisée, la fonctionnalité n'est pas utilisée.
- set_forbidden_image : image à afficher à la place de l'image demandée en cas d'interdiction
Affichage d'image :
- display : affiche l'image en paramètre, se trouvant éventuellement dans le répertoire en paramètre
- get_image : récupère dans une chaine le contenu de l'image et stocke dans la propriété header l'entête à renvoyer (avec header() ) pour un affichage ultérieur
- display_forbidden : affiche l'image d'interdiction
Les messages renvoyés avec les exceptions qui sont levées peuvent être :
- IBG_Error_occured : erreur lors de l'accès au fichier (qui existe pourtant) : n'est pas censée se produire...
- IBG_Not_an_image : le fichier demandé n'est pas une image
- IG_File_not_exists : le fichier demandé n'existe pas
- IG_Forbidden : affichage interdit pour cette image. Ne survient que si aucune image d'interdiction n'est définie.
Voici donc la source :