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 :

/**
     * Favilink
     *
     * Affiche un lien précédé du favicon
     * du site internet de destination.
     *
     * @author        PHPLizardo
     * @version        1
     * @license        CC BY-NC-SA
     *
     * @param        string    $url    url à laquelle vous souhaitez ajouter le favicon.
     * @param        string    $text   Si vous souhaitez un texte personnalisé pour lien.
     * @param        string    $alt    favicon alternative dans le cas ou le site internet
 concerné n'en possède pas.
     *
     */


    function favilink($url, $text = NULL, $alt = NULL){
   
        /**
         * Si un texte pour le lien est fourni, on utilise ce dernier,
         * dans le cas contraire, on affiche l'url donnée.
         */

       
        if($text != NULL)
            $text = $text;
        else
            $text = $url;
           
   
        /**
         * La valeur du paramètre $url doit impérativement
         * être un url valide. On vérifie cette condition.
         */

         
        $url = filter_var ($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED);
       
        if ($url !== FALSE){
       
            /**
             * Nous devons extraire le nom de domain de l'url
             * passée en paramètre. On découpe l'url en portions.
             */

           
             $parts = parse_url($url);
             
             /**
              * Récupération du nom de domaine par recomposition de
              * l'url précédemment découpée.
              */

             
             $domain = $parts['scheme'].'://'.$parts['host'];
             
             /**
              * Récupération du favicon. On recherche le favicon dans le répertoire
              * racine du site internet car c'est l'endroit le plus répendu. Si, et
              * seulement si le fichier n'existe pas, on télécharge la page distante
              * et on extrait l'adresse du favicon depuis l'en-tête de la page.
              */

             
             $favicon = $domain.'/favicon.ico';
             
             //if ( !file_get_contents ( $favicon ) ){
            if (!@file_get_contents($favicon)){
           
                $page = file_get_contents ( $domain );
               
                if (preg_match('#<link rel=\"(shortcut )?icon\"( type="image/png")? href=\"(.+)\" />#', $page, $match ) ){
                     
                    $favicon = $match[3];    
               
                }else{
               
                    /**
                     * Si il n'y a aucun favicon défini pour ce site internet, dans le cas ou une
                     * image alternative est fourni, on affiche cette dernière, sinon on affiche rien.
                     */

                    if($alt != null)
                        $favicon = $alt;
                    else
                        return '<a href="'.htmlspecialchars ( $url ).'">'.htmlspecialchars($text).'</a>';
               
                }
               
                /**
                 * Si c'est une adresse abosulue, par exemple dans le cas où le favicon
                 * est situé sur un site internet externe ou un sous-domaine, on récupère
                 * l'adresse entière. Sinon on combine le nom de domaine et l'adresse relative
                 * du favicon pour recréer une adresse valide.
                 */

                 
                if( filter_var ( $favicon, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED ) === FALSE ){

                    /**
                     * On retire l'éventuel slash (/) qui se situe au début de l'adresse
                     * relative pour éviter le double slash.
                     */

                     
                    if ( $favicon{1} == '/' )
                        $favicon = substr ( $favicon, 1 );
                   
                    $favicon = $domain . $favicon;
                   
                }                
             
             }
             
             return '<img src="'.htmlspecialchars($favicon).'" alt="" title=" '.htmlspecialchars($domain).' " />&nbsp;'.'<a href="'.htmlspecialchars($url).'">'.htmlspecialchars($text).'</a>';
           
        }
   
    }

Pour l’utiliser, voici un exemple :

<?php

echo favilink ( 'http://blog.ludikreation.com', 'Le blog de LudiKreation').'<br />';
echo favilink ( 'http://www.ludikreation.com', 'Le site de LudiKreation');

?>

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 :

No Responses

Leave a Reply

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


*