首页/ 填坑/ 文章详情

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

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

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

联想到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

凡心的仙人凡心的仙人 03-18 14:35
谢谢你了!
rantrismrantrism 2023-04-03 11:27
您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan 作者申
唐牛才是食神唐牛才是食神 2022-06-15 10:51
(*°▽°*)八(*°▽°*)♪,解决了
唐牛才是食神唐牛才是食神 2022-06-15 10:49
发现不得了的东西,今晚回去好好研究下...
胖螺胖螺 2022-02-04 00:58
( ゜- ゜)つロ 在写了在写了。看到也有些感慨。因为站长前年在我原博客的留言,让我毅然选择去深造,选择读研,曾经我想过挺多东西的,还是自己本专业的适合我自己。在这先表达感谢。新年快乐!