PHP – Favilink – Afficher le favicon d’un site avec son lien

Au détour de mes veilles php, à la recherche des nouveautés et petites astuces, je suis tombé sur un petit script sympathique qui permet de récupérer le favicon d’un site et ainsi de réaliser une petite liste de liens externes avec le favicon associé au site en question. Un petit script malin que j’ai envie de vous faire partager à mon tour. Je l’ai légèrement ré-agencé à ma sauce et très peu modifié au final.

favilink

Voici la fonction favilink :

[pastacode lang= »php » manual= »%3C%3Fphp%0A%2F**%0A*%20Favilink%0A*%0A*%20Affiche%20un%20lien%20pr%C3%A9c%C3%A9d%C3%A9%20du%20favicon%0A*%20du%20site%20internet%20de%20destination.%0A*%0A*%20%40author%20PHPLizardo%0A*%20%40version%201%0A*%20%40license%20CC%20BY-NC-SA%0A*%0A*%20%40param%20string%20%24url%20url%20%C3%A0%20laquelle%20vous%20souhaitez%20ajouter%20le%20favicon.%0A*%20%40param%20string%20%24text%20Si%20vous%20souhaitez%20un%20texte%20personnalis%C3%A9%20pour%20lien.%0A*%20%40param%20string%20%24alt%20favicon%20alternative%20dans%20le%20cas%20ou%20le%20site%20internet%0Aconcern%C3%A9%20n’en%20poss%C3%A8de%20pas.%0A*%0A*%2F%0A%0Afunction%20favilink(%24url%2C%20%24text%20%3D%20NULL%2C%20%24alt%20%3D%20NULL)%7B%0A%0A%09%2F**%0A%09*%20Si%20un%20texte%20pour%20le%20lien%20est%20fourni%2C%20on%20utilise%20ce%20dernier%2C%0A%09*%20dans%20le%20cas%20contraire%2C%20on%20affiche%20l’url%20donn%C3%A9e.%0A%09*%2F%0A%0A%09if(%24text%20!%3D%20NULL)%0A%09%09%24text%20%3D%20%24text%3B%0A%09else%0A%09%09%24text%20%3D%20%24url%3B%0A%0A%09%2F**%0A%09*%20La%20valeur%20du%20param%C3%A8tre%20%24url%20doit%20imp%C3%A9rativement%0A%09*%20%C3%AAtre%20un%20url%20valide.%20On%20v%C3%A9rifie%20cette%20condition.%0A%09*%2F%0A%0A%09%24url%20%3D%20filter_var%20(%24url%2C%20FILTER_VALIDATE_URL%2C%20FILTER_FLAG_HOST_REQUIRED)%3B%0A%0A%09if%20(%24url%20!%3D%3D%20FALSE)%7B%0A%0A%09%09%2F**%0A%09%09*%20Nous%20devons%20extraire%20le%20nom%20de%20domain%20de%20l’url%0A%09%09*%20pass%C3%A9e%20en%20param%C3%A8tre.%20On%20d%C3%A9coupe%20l’url%20en%20portions.%0A%09%09*%2F%0A%0A%09%09%24parts%20%3D%20parse_url(%24url)%3B%0A%0A%09%09%2F**%0A%09%09*%20R%C3%A9cup%C3%A9ration%20du%20nom%20de%20domaine%20par%20recomposition%20de%0A%09%09*%20l’url%20pr%C3%A9c%C3%A9demment%20d%C3%A9coup%C3%A9e.%0A%09%09*%2F%0A%0A%09%09%24domain%20%3D%20%24parts%5B’scheme’%5D.’%3A%2F%2F’.%24parts%5B’host’%5D%3B%0A%0A%09%09%2F**%0A%09%09*%20R%C3%A9cup%C3%A9ration%20du%20favicon.%20On%20recherche%20le%20favicon%20dans%20le%20r%C3%A9pertoire%0A%09%09*%20racine%20du%20site%20internet%20car%20c’est%20l’endroit%20le%20plus%20r%C3%A9pendu.%20Si%2C%20et%0A%09%09*%20seulement%20si%20le%20fichier%20n’existe%20pas%2C%20on%20t%C3%A9l%C3%A9charge%20la%20page%20distante%0A%09%09*%20et%20on%20extrait%20l’adresse%20du%20favicon%20depuis%20l’en-t%C3%AAte%20de%20la%20page.%0A%09%09*%2F%0A%0A%09%09%24favicon%20%3D%20%24domain.’%2Ffavicon.ico’%3B%0A%0A%09%09%2F%2Fif%20(%20!file_get_contents%20(%20%24favicon%20)%20)%7B%0A%09%09if%20(!%40file_get_contents(%24favicon))%7B%0A%0A%09%09%09%24page%20%3D%20file_get_contents%20(%20%24domain%20)%3B%0A%0A%09%09%09if%20(preg_match(‘%23%23’%2C%20%24page%2C%20%24match%20)%20)%7B%0A%0A%09%09%09%09%24favicon%20%3D%20%24match%5B3%5D%3B%0A%0A%09%09%09%7Delse%7B%0A%0A%09%09%09%09%2F**%0A%09%09%09%09*%20Si%20il%20n’y%20a%20aucun%20favicon%20d%C3%A9fini%20pour%20ce%20site%20internet%2C%20dans%20le%20cas%20ou%20une%0A%09%09%09%09*%20image%20alternative%20est%20fourni%2C%20on%20affiche%20cette%20derni%C3%A8re%2C%20sinon%20on%20affiche%20rien.%0A%09%09%09%09*%2F%0A%09%09%09%09if(%24alt%20!%3D%20null)%0A%09%09%09%09%24favicon%20%3D%20%24alt%3B%0A%09%09%09%09else%0A%09%09%09%09return%20’%3Ca%20href%3D%22′.htmlspecialchars%20(%20%24url%20).’%22%3E’.htmlspecialchars(%24text).’%3C%2Fa%3E’%3B%0A%0A%09%09%09%7D%0A%0A%09%09%09%2F**%0A%09%09%09*%20Si%20c’est%20une%20adresse%20abosulue%2C%20par%20exemple%20dans%20le%20cas%20o%C3%B9%20le%20favicon%0A%09%09%09*%20est%20situ%C3%A9%20sur%20un%20site%20internet%20externe%20ou%20un%20sous-domaine%2C%20on%20r%C3%A9cup%C3%A8re%0A%09%09%09*%20l’adresse%20enti%C3%A8re.%20Sinon%20on%20combine%20le%20nom%20de%20domaine%20et%20l’adresse%20relative%0A%09%09%09*%20du%20favicon%20pour%20recr%C3%A9er%20une%20adresse%20valide.%0A%09%09%09*%2F%0A%0A%09%09%09if(%20filter_var%20(%20%24favicon%2C%20FILTER_VALIDATE_URL%2C%20FILTER_FLAG_HOST_REQUIRED%20)%20%3D%3D%3D%20FALSE%20)%7B%0A%0A%09%09%09%09%2F**%0A%09%09%09%09*%20On%20retire%20l’%C3%A9ventuel%20slash%20(%2F)%20qui%20se%20situe%20au%20d%C3%A9but%20de%20l’adresse%0A%09%09%09%09*%20relative%20pour%20%C3%A9viter%20le%20double%20slash.%0A%09%09%09%09*%2F%0A%0A%09%09%09%09if%20(%20%24favicon%7B1%7D%20%3D%3D%20’%2F’%20)%0A%09%09%09%09%24favicon%20%3D%20substr%20(%20%24favicon%2C%201%20)%3B%0A%0A%09%09%09%09%24favicon%20%3D%20%24domain%20.%20%24favicon%3B%0A%0A%09%09%09%7D%0A%0A%09%09%7D%0A%0A%09%09return%20’%3Cimg%20title%3D%22%20′.htmlspecialchars(%24domain).’%20%22%20src%3D%22′.htmlspecialchars(%24favicon).’%22%20alt%3D%22%22%20%2F%3E%20′.’%3Ca%20href%3D%22′.htmlspecialchars(%24url).’%22%3E’.htmlspecialchars(%24text).’%3C%2Fa%3E’%3B%0A%0A%09%7D%0A%0A%7D%0A » message= » » highlight= » » provider= »manual »/]

[/cc]

Pour l’utiliser, voici un exemple :

[pastacode lang= »php » manual= »%3C%3Fphp%20%0A%0Aecho%20favilink%20(%20’http%3A%2F%2Fblog.ludikreation.com’%2C%20’Le%20blog%20de%20LudiKreation’).’%3Cbr%20%2F%3E’%3B%0Aecho%20favilink%20(%20’http%3A%2F%2Fwww.ludikreation.com’%2C%20’Le%20site%20de%20LudiKreation’)%3B%0A%0A%3F%3E » message= » » highlight= » » provider= »manual »/]

 

 

Ce qui donne :
favilink

Vous l’aurez compris, avec quelques petites modifications de styles CSS et on peut obtenir des résultats assez sympa.

Pour retrouver la source du code proposé par PHPLizardo sur PHP Sources

Articles pouvant vous intéresser :

Author: Franck Pertegas

Share This Post On

Trackbacks/Pingbacks

  1. PHP – Convertir une couleur Hexadécimale en code couleur RGB | LudiBlog - [...] PHP – Favilink – Afficher le favicon d’un site avec son lien [...]

Submit a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *