Interdire le Hotlinking d’image

Qu’est-ce que le hotlinking d’image ?
C’est l’utilisation de ressources (images) provenant d’un site (A), que l’on utilise sur un autre (B) en gardant le lien d’origine (Lien ressource A).
Cela pose problème puisque notre webmaster (A) doit supporter les accès au fichier du site (B).
Pour interdire le Hotlinking (d’image), voici une petite astuce. On utilisera le .htaccess qui sera interprété par Apache.

Je reprendrai l’exemple de mon blog (Tuxboard.com) souvent visité et fréquemment “pompé”.
Il faudra au préalable activer le module de rewrite d’apache.
Dans le fichier .htaccess :

  1. RewriteEngine On
  2. On autorise les sites qui peuvent utiliser la ressource :
  3. RewriteCond %{HTTP_REFERER} !^http://(www\.)?tuxboard.com(/)?.*$ [NC]
  4. RewriteCond %{HTTP_REFERER} !^http://(www\.)?google.com/reader(/)?.*$ [NC]
  5. Et aussi les moteurs pour le référencement :
  6. RewriteCond %{HTTP_USER_AGENT} !^Googlebot [NC]
  7. RewriteCond %{HTTP_USER_AGENT} !^Googlebot-Image [NC]
  8. RewriteCond %{HTTP_USER_AGENT} !^Googlebot-Mobile [NC]
  9. RewriteCond %{HTTP_USER_AGENT} !^Msnbot [NC]
  10. RewriteCond %{HTTP_USER_AGENT} !^Slurp [NC]
  11. RewriteCond %{HTTP_USER_AGENT} !^Mediapartners-Google [NC]
  12. #Lien pour autoriser Google image d’indexer et d’utiliser l’image
  13. RewriteCond %{HTTP_REFERER} !^http://.*google\.(com¦(co\.)?[a-z]{2})/

Ensuite il existe plusieurs façon de montrer à l’utilisateur du site (B) que l’image provient du site (A) :
On affiche une erreur :

  1. RewriteRule \.(gif|jpe?g|png|bmp)$ - [F]

On affiche une image, précisant les types d’images que l’on souhaite protéger.

  1. RewriteRule \.(gif|jpe?g|png|bmp)$ /images/no-hotlink.jpg [L,NC]

Ce qui affichera par exemple pour cette image du site Tuxboard :
http://images.tuxboard.com/d/8257-1/iphone+3G+photos.jpg

Pour tester que votre code fonctionne, rendez vous sur ce site pour coller l’URL de votre image.

Pour les blogs avec les RSS, vous pouvez autoriser les RSS readers que vous pensez être utile (vu chez Korben) :

  1. RewriteCond %{HTTP_REFERER} !^http://(www\.)?netvibes.com(/)?.*$ [NC]
  2. RewriteCond %{HTTP_REFERER} !^http://(www\.)?bloglines.com(/)?.*$ [NC]
  3.  

Fonction PHP retournant une Liste déroulante / Multi-Select

Suite à un billet d’un collègue développeur (Jarodxxx), et d’un commentaire souhaitant obtenir un return, je vous propose quelques fonctions très utiles que j’utilise.

1 - Fonction qui retourne une liste déroulante (SELECT, ComboBox) :

  1. /*fonction qui fabrique une combobox
  2. parametres :
  3. $tabs => $tableau qui contient les données a mettre dans la combo
  4. $value => champ utiliser comme value
  5. $text => champ a utiliser comme text
  6. $comboname => nom a donner a la combo
  7. $inserblank => boolean qui dit si on doit inserer une ligne blanche au debut de la combo
  8. $selectedValue => valeur a selectionner dans la combo
  9. $onChangeEvent => fonction javascript a appeler sur l’event ‘onChange’
  10. $disabled => desactiver ou non la liste*/
  11.  
  12. function makeComboBox($tabs, $value, $text, $comboname, $insertblank=false, $selectedValue=false, $onChangeEvent=, $disabled=false)
  13. {
  14.                   /*par defaut, combo "vide" */
  15.                     $return = ‘<select name="’.$comboname.‘" id="’.$comboname.‘" disabled="disabled"><option value="">Empty list</option></select>’;
  16.                     if (count($tabs[0]) > 0)
  17.                     {
  18.                               $return = ‘<select name="’.$comboname.‘" id="’.$comboname.‘"’;
  19.                               if ($onChangeEvent != )
  20.                                         $return .= ‘ onChange="’.$onChangeEvent.‘"’;
  21.                               if ($disabled)
  22.                                         $return .= ‘ disabled="disabled"’;
  23.                               $return .= ‘>’;
  24.  
  25.                               if ($insertblank)
  26.                                         $return .= ‘<option value=""></option>’;
  27.  
  28.                               foreach($tabs as $tab){
  29.                               //for ($i=0; $i<count($tab); $i++){
  30.  
  31.                                         $return .= ‘<option value="’.$tab[$value].‘"’;
  32.                                         if ($selectedValue!=false)
  33.                                                   if ($tab[$value] == $selectedValue)
  34.                                                             $return .= ‘ selected="selected"’;
  35.                                         $return .= ‘>’.$tab[$text].‘</option>’."\n";
  36.                               }
  37.                               $return .= ‘</select>’;
  38.                     }
  39.                     return $return;
  40. }
  41.  

2 - Fonction qui retourne un Multi Select : Liste déroulante avec plusieurs choix possibles:

  1. /*Gestion des combos a selection multiples
  2. parametres :
  3. $tab => $tableau qui contient les données a mettre dans la combo
  4. $value => champ utiliser comme value
  5. $text => champ a utiliser comme text
  6. $comboname => nom a donner a la combo
  7. $inserblank => boolean qui dit si on doit inserer une ligne blanche au debut de la combo
  8. $selectedValue => valeur a selectionner dans la combo
  9. $onChangeEvent => fonction javascript a appeler sur l’event ‘onChange’
  10. $disabled => desactiver ou non la liste
  11. $size => Nombre d’élément de la liste que l’on affiche
  12. */
  13. function makeMultipleComboBox($tab, $value, $text, $comboname, $insertblank=false, $selectedValue, $onChangeEvent=, $disabled=false, $size=5)
  14. {
  15. /*on recupere une combo normale, sans rien selectionner*/
  16. $return = $this->makeComboBox($tab, $value, $text, $comboname, $insertblank, -1, $onChangeEvent, $disabled);
  17. /*On change le type de combo*/
  18. $return = str_replace(‘<select ‘, ‘<select multiple size="’.$size.‘" ‘, $return);
  19. /*on parse le code html pour rajouter les selections la ou il faut*/
  20. if (!empty($selectedValue))
  21. {
  22. //print_r($selectedValue);exit;
  23. //$tSelectedValue = split(’,', $selectedValue);
  24. foreach ($selectedValue as $cur)
  25. {
  26. $return = str_replace(‘<option value="’.$cur.‘">’, ‘<option value="’.$cur.‘" selected="selected">’, $return);
  27. }
  28. }
  29. return $return;
  30. }
  31.  

2 fonctions très utiles donc qui génèrent le code HTML.

(PHP) Mettre des majuscules aux premières lettres

Je commence à vous montrer quelques scripts et astuces pour améliorer vos codes (PHP).
Une petite astuce toute simple pour mettre des majuscules à tous vos mots d’une chaîne de caractères. La fonction ucwords(); de php le permet , exemple :

$chaine = ‘alexandre val developpeur web’;
echo ucwords($chaine);

Ce qui affichera :

Alexandre Val Developpeur Web

Attention : la fonction ne comprend pas les ‘-’, ‘_’ ‘(’ devant les lettres. ce qui fait qu’une phrase comme celle-ci :

echo ucwords(’alexandre val (developpeur web)’);

affichera :

Alexandre Val (developpeur Web)

N’oubliez pas les fonction pour tout réduire en minuscule : strtolower(); et en majuscule : strtoupper();
strtolower(), que l’on peut combiner avec ucwords() pour formatter le texte, exemple :

$chaine = ALEXANDRE VAL DEVELOPPEUR WEB’;
echo ucwords(strtolower($chaine));

Affichera :

Alexandre Val Developpeur Web

Développements récents

- Réalisation d’un site sur les acteurs des jeux vidéos façon IMDB. : Games Credits

- Refonte graphique de mon site CV Freelance. Voir la précédente version.

- Développement d’une page de démarrage personnalisable. Cliquez pour voir l’explication

- Administrateur du Site/Blog Tuxboard.com.
Plus de 30.000 visiteurs quotidien. Consultez les statistiques en détails de mon blog.
Design CSS, développement PHP/MySQL, retouche Photoshop et administration Linux (Debian).
Disponible à cette adresse.

- Développement du site Wanimo.com.
Design CSS, développement PHP(Objet)/MySQL, retouche Photoshop.
Disponible à cette adresse.

- Création du site Cronos
Découpe Photoshop, intégration graphique, design CSS, développement PHP.

- Développement de modules pour un forum de poker : Lyonholdem.com
Création de module greffés au forum de discussion et au backoffice.
Disponible à cette adresse.

- Développement d’une boutique en ligne simplifiée (Paiement par Paypal/CB).
Possibilité d’upgrader en boutique en ligne avec paiement en ligne CB.
Disponible à cette adresse.