PHP & MySQL

Ajouter automatiquement son logo sur les images volées

Le 14 décembre 2007 à 12:59 par Séverin

Ajouter automatiquement son logo sur les images volées

Une image volée c’est une image hébergée sur votre site et affichée sur un autre.

Sur le principe, je ne suis pas contre, tant qu’on rend à César ce qui appartient à César…
Mais la grande majorité des sites/forums/blogs qui affichent les images hébergées ailleurs ne prennent même pas la peine de préciser d’où elle provient. C’est rageant de perdre de la bande passante dans ces conditions.

Il y’a deux solutions à ce problème : interdire l’accès à vos images depuis d’autres sites ou signaler vous-même que cette image est hébergée chez vous en ajoutant un filigrane à l’image.

C’est de cette deuxième solution que je vais parler. Mais pour faire ça proprement, on va ajouter ce filigrane de façon automatique et uniquement en cas de vol d’image, de façon à ce que le filigrane ne s’affiche pas sur votre site.

Le principe de base est d’utiliser l’url rewriting pour faire passer l’affichage de l’image par un script PHP.

Il faut donc ajouter à la base de votre répertoire d’image un fichier .htaccess et un fichier de PHP.

.htaccess


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www.gamesandgeeks.com(/)?.*$
RewriteCond %{HTTP_REFERER} !^http://www.geekomatik.com(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.netvibes.com(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://feeds.feedburner.com(/)?.*$ [NC]
RewriteRule .*.(png|jpg|jpeg)$ /images/mark.php [NC, L]

Petite explication du fichier :

RewriteEngine on : active l’url Rewriting

Les lignes commençant par RewriteCond définissent les conditions de réécriture de l’url. Dans ce cas, on demande à réécrire tout le temps sauf quand le referer (le site appelant l’image) est soit votre propre site (ici Games and Geeks) soit un site que vous autorisez à utiliser l’image.

Et enfin, la ligne RewriteRule définie les extensions de fichier concernés et le script à appeler.

mark.php

Pour cette fonction, on va utiliser le Watermarker d’un précédent article.

  1.  
  2. include_once(‘watermarker.php’);
  3. //Début de la configuration
  4. // Répertoire racine du site
  5. $rootPath = $_SERVER[‘DOCUMENT_ROOT’];
  6.  
  7. // Url racine du site
  8. $rootUrl = ‘http://www.gamesandgeeks.com’;
  9.  
  10. // Chemin vers le logo à ajouter
  11. $ logo = $_SERVER[‘DOCUMENT_ROOT’.‘/images/watermark.png’;
  12.  
  13. // Chemin vers le repertoire de cache du Watermarker
  14. $cache = $_SERVER[‘DOCUMENT_ROOT’.‘/images/watermark.cache’;
  15. //Fin de la configuration
  16.  
  17. // Chemin de l’image
  18. $imagePath = $_SERVER[‘DOCUMENT_ROOT’].$_SERVER[‘REQUEST_URI’];
  19.  
  20. // Si l’image n’existe pas
  21. if(!file_exists($_SERVER[‘DOCUMENT_ROOT’].$_SERVER[‘REQUEST_URI’])){
  22.         header("HTTP/1.1 404 Not found");
  23.         header("Status : 404 Not Found");
  24.         header( "Location: http://www.gamesandgeeks.com/blog" );
  25.         exit();
  26. }
  27.  
  28. // On marque l’image et on l’affiche
  29. $watermarker = new Watermarker($logo, POSITION_BOTTOM, POSITION_RIGHT);
  30. $watermarker->display($imagePath, 75, $cache);
  31.  

Démonstration

Voilà une image tirée de mon blog. Si vous regardez le code de la page, vous verrez que le lien pointe directement sur l’image :

Be Mouse de Konami

Mais si vous allez sur mon blog, vous verrez que l’image ne contient pas le filigrane :
L’image sur mon blog

Conclusion

Les gros sites on plutôt tendances à bloquer l’accès à leurs images ou à rediriger vers une image type. Et pour cause, ce script est plus consommateur de ressource que d’afficher directement l’image. Il n’est donc à utiliser que si vous décidez de dédier des ressources à ajouter des filigranes.

6 commentaires »

Gravatar

Commentaire de micka39

le 14 décembre 2007 à 17:40

Moi je vois le filigrane sur ton site et ici …

Gravatar

Commentaire de Maxime Guernion

le 14 décembre 2007 à 18:12

Ca marche très bien chez moi. Une astuce vraiment sympa et puissante, merci !

Gravatar

Commentaire de code34

le 14 décembre 2007 à 21:40

to micka39

rafraichit le cache de ton navigateur ;) tu vas voir ça va fonctionner :D

Gravatar

Commentaire de fozzy

le 14 décembre 2007 à 21:45

Oui il est possible de voir le filigrane sur les 2 sites à cause de la gestion du cache de certains navigateurs, ou bien sur si on a modifié le referer dans ses en-têtes HTTP…

Gravatar

Commentaire de Séverin

le 15 décembre 2007 à 0:24

Ca, c’est le cache de ton navigateur qui fait ça.

Je cherche une solution pour éviter ça. Mais un CTRL+F5 sur mon site et tu n’auras plus le filigrane.

Gravatar

Commentaire de Actu du BuZZ

le 29 février 2008 à 15:28

Depuis le temps que je cherche cette solution :)
Merci beaucoup pour ce partage.

Laisser un commentaire

Votre Nom

Votre E-mail (obligatoire mais ne sera pas publié)

Votre Site ou blog

Votre commentaire

Valid XHTML 1.0 Transitional