首页/ 填坑/ 文章详情

远程抓取友人账博主头像图片,缓存到本地服务器

友人账的博主,网络稳定性差强人意,动不动失联;直接使用图片地址,要么加载特别缓慢,要么加载失败,间接导致友人账页面处于加载图片中,不了解内情的,认为网站的服务器太渣,平添无妄之灾。

解决方法很简单,直接手动添加图片头像。不过手动添加是不可能,这辈子都不可能手动添加。

联想到Gravatar缓存头像,友人账里的头像同样也是图片,能否一样缓存到本地服务器?

在缓存头像之前,先制定图片文件名,网站的域名是不错的选择,唯一性,便宜识别。

获取文件名函数

PHP/**
 * 通过链接,获取文件名
 * @method getFileNameByUrl
 * @param string $url 图片链接
 * @return string
 */
function getFileNameByUrl($url) {
    $file_name = preg_replace('/^(https|http):///i','', $url);
    $file_name = trim($file_name,'/');
   $file_name = str_replace('.','_',$file_name);
   return $file_name
} 
获取远程图片与之前获取Gravatar 的图片有所不同,这次改成用file_get_contents函数远程获取。

获取远程图片函数

PHP/**
 * 获取远程图片
 * @method getRemoteImage
 * @param string $url 图片链接
 * @param string $name 文件名称
 * @return string
 */
 function getRemoteImage($url, $file_name) {
    $cache_time = 1209600;
    $path = './cache/friend/';
    $file_path = $path . $file_name . '.png';

    if (!file_exists($path)) {//生成文件夹
        mkdir($path, 0777, true);
    }

    if (!is_file($file_path) || (time() - filemtime($file_path)) > $cache_time) {
        $content = file_get_contents($url);
        file_put_contents($file_path, $content);
    }

    if(is_file($file_path) && filesize($file_path) != 0) { //图片存在
        return './cache/friend/'.$file_name.'.png';
    }

    return $url;
} 

缓存友人账博主头像

PHP$url = 'https://image.didaolan.cn/avatar.jpg'
$file_name = getFileNameByUrl($url);
echo getRemoteImage($url,$file_name);
//输出:./cache/friend/image_didaolan_cn.png
file_get_contents方法获取远程有个缺点,如果对方的图片开启防外链功能,图片是无法正常获取

文章评论0 records

最新 最早

0

最新评论Latest comments

big2catbig2cat 08-27 16:11
然而没什么用,smartpss不兼容老录像机,就算能看回放,很多时间点在回放里也看不到
HentaiCatHentaiCat 2020-12-30 10:22
考科目二全程很紧张,考了三次才过,有次侧方入库直接pass,100分扣完,呜呜呜~
猫猫酱猫猫酱 2020-11-12 10:56
一入多肉深似海,说多都是泪
soulkunsoulkun 2020-11-05 15:54
IconFont的图标真的很好用!!!
无限链霉球菌无限链霉球菌 2020-11-03 11:41
药店,了解一下(`・ω・´)