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.
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 :
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 :
Trackbacks/Pingbacks