Goofi: ramener des google fonts en local en une ligne

Ceux qui, avec une ténacité et une abnégation forçant le respect autant que l'admiration, me suivent depuis longtemps se souviennent sans doute de Goofy, un script php permettant de récupérer les fontes de google sous forme de zip prêt à l'emploi...

Ben je trouvais ça encore un peu lourd, sans compter qu'il faut tout le temps modifier le script pour qu'il continue à fonctionner. Par voie de conséquence, j'ai repris l'idée mais en la modifiant quelque peu...

Ce nouveau script s'utilise de façon radicalement différente: en effet, il suffit de l'appeler via la balise du header, comme le fait la balise proposée par google, sauf qu'on remplace l'url de google par celle de goofi:

<link href="https://fonts.googleapis.com/css?family=Nunito+Sans|Roboto" rel="stylesheet">

devient

<link href="http://monserveur.com/goofi.php?family=Nunito+Sans|Roboto" rel="stylesheet">

Et... c'est tout.

Goofi.php va :

  1. chercher le css fourni par Google,
  2. récupérer les fontes pour les copier en local
  3. recrér le css en remplaçant les chemins google par les chemins locaux,
  4. stocker le tout sur le serveur
  5. et renvoyer le css sous forme de feuille de style.

Le téléchargement ne se fait que la première fois, et seulement depuis le serveur, ainsi l'usager n'a-t-il rien à craindre du flicage goorwellien

Le script en question:

<?php 
header("Content-Type: text/css");
$font_folder='fonts';
if (!empty($_GET['family'])){
    if (!is_dir($font_folder)){mkdir($font_folder);}
    $family=strip_tags($_GET['family']);
    $css_filename=urlencode($family).'.css';
    $css_file_url='http://fonts.googleapis.com/css?family='.urlencode($family);
    if (!is_file($css_filename)){
        $css=file_get_contents($css_file_url);

        preg_match_all("#font-family: '(?P<name>[^']+)[<img class="smile " src="http://warriordudimanche.net/plugins/WDD_replace/img/normal/satisfait.png"/>]*?url\((?P<url>[^\)]+)\)#", $css, $urls);

        foreach($urls['url'] as $nb=>$url){
            $font_file=$urls['name'][$nb].basename($url);
            if (!is_file($font_folder.'/'.$font_file)){
                $font=file_get_contents($url);
                file_put_contents($font_folder.'/'.$font_file, $font);
            }
            $css=str_replace($url,$font_folder.'/'.$font_file,$css);
        }
        file_put_contents($css_filename,$css );
    }else{
        $css=file_get_contents($css_filename);
    }
    exit($css);
}

Le Zip et le dépôt

❝ 2 commentaires ❞

1  jerry wham le

 
2  Nicolas le

Mais c'est super, merci beaucoup !

 

Fil RSS des commentaires de cet article

✍ Écrire un commentaire

Quelle est la troisième lettre du mot pvpvr ?