PHP 批量 下载谷歌字体到本地

在使用 AdminLTE 时,引入了 google 字体样式,在某些时间并不很理想,于是,便下载到本地使用。

前提,你需要能访问线上的谷歌字体样式。

  1. 在开始之前,你需要确认 PHP 扩展开启了 extension=php_openssl.dll
  2. 及 allow_url_fopen = on 和 allow_url_include = on
  3. 并且 配置 证书文件 下载文件并存入本地 http://curl.haxx.se/ca/cacert.pem
  4. openssl.cafile=D:\phpStudy\tools\cacert.pem

完成后,会在当前程序目录下会有很多谷歌字体文件。之后,修改谷歌字体样式中引入文件位置即可正常使用。

<?php
/*
* 将谷歌字体下载到本地
* 针对 AdminLTE 2.4 引入 google 字体样式
*
* 在开始之前,你需要确认 PHP 扩展开启了 extension=php_openssl.dll
* 及 allow_url_fopen = On 和 allow_url_include = on
* 并且 配置 证书文件 下载文件并存入本地 http://curl.haxx.se/ca/cacert.pem
* openssl.cafile=D:\phpStudy\tools\cacert.pem
*/
// 设置程序最大执行时间
set_time_limit(120);

// 读取谷歌字体样式文件
$data = file_get_contents('./css.css');

// 正则匹配 url() 中内容
preg_match_all('/url\(([\s\S]*?)\)/', $data, $res);

// 匹配成功 下载并存到程序当前目录
if (!empty($res) && !empty($res[1])) {
foreach ($res[1] as $key => $url) {
// 远程读取
$font_data = file_get_contents($url);

// 获取文件名
$fname = basename($url);

// 存储到当前目录下
$size = file_put_contents('./'. $fname, $font_data);

// 调试输出
echo 'file '.($key+1).' :'.$fname.' size : <b>'. number_format($size/1024, 2, '.', ''),'KB</B><br />';
}
} else {
echo 'not fount';
}
?>