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 :
- chercher le css fourni par Google,
- récupérer les fontes pour les copier en local
- recrér le css en remplaçant les chemins google par les chemins locaux,
- stocker le tout sur le serveur
- 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 normal" src="http://www.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);
}
❝ 8 commentaires ❞
Fil RSS des commentaires de cet article
✍ Écrire un commentaire
les commentaires relevant du SPAM seront filtrés et dégagés direct...