上一篇
siblings 链式写法,选项卡函数变得更优雅
友人账的博主,网络稳定性差强人意,动不动失联;直接使用图片地址,要么加载特别缓慢,要么加载失败,间接导致友人账页面处于加载图片中,不了解内情的,认为网站的服务器太渣,平添无妄之灾。
解决方法很简单,直接手动添加图片头像。不过手动添加是不可能,这辈子都不可能手动添加。
联想到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方法获取远程有个缺点,如果对方的图片开启防外链功能,图片是无法正常获取。
最新评论Latest comments