Discuz! X 上传头像到UCenter时自动刷新CDN服务器上的头像缓存 [复制链接]
1941
0
应用场景:为减少源站流量,我们可以永久缓存用户的头像,只在用户上传新头像时,才刷新CDN服务器上的缓存。
本文案例中的CDN服务器环境如下,仅供参考:
Nginx,已安装 cache-purge 扩展,通过请求 $host/purge/$uri 的方式清除缓存。所使用的域名与源站一致。
1、首先在CDN服务器中配置清除规则,将源站服务器IP设置为允许;
2、打开 uc_server/data/config.inc.php ,在末尾加入CDN服务器的IP地址,便于统一调用和修改。
3、打开 uc_server/control/user.php ,添加上传头像后自动清除CDN缓存的功能。
查找:
替换为:
这一步是取得头像路径。接下来查找:
在前方加入:
上传覆盖即可。
附:若你要在用户上传头像后点击“完成”时自动刷新头像上传页面,按照以下教程操作:
在 home/spacecp_avatar.htm 模板中查找:
在其下方新增:
上传并更新缓存即可。
4、管理员清除头像时,同步清除CDN服务器上的头像缓存。
打开 uc_server/model/user.php ,查找:
替换为:
$uccdnip = UC_CDNIP; //在 data/config.inc.php 中设置UC的CDN服务器IP,用于通知刷新头像
上传覆盖即可。
本文案例中的CDN服务器环境如下,仅供参考:
Nginx,已安装 cache-purge 扩展,通过请求 $host/purge/$uri 的方式清除缓存。所使用的域名与源站一致。
1、首先在CDN服务器中配置清除规则,将源站服务器IP设置为允许;
2、打开 uc_server/data/config.inc.php ,在末尾加入CDN服务器的IP地址,便于统一调用和修改。
define('UC_CDNIP', '123.123.123.123');
3、打开 uc_server/control/user.php ,添加上传头像后自动清除CDN缓存的功能。
查找:
<p>
</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$bigavatarfile = UC_DATADIR.'./avatar/'.$this->get_avatar($uid, 'big', $avatartype);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$middleavatarfile = UC_DATADIR.'./avatar/'.$this->get_avatar($uid, 'middle', $avatartype);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$smallavatarfile = UC_DATADIR.'./avatar/'.$this->get_avatar($uid, 'small', $avatartype);</p>
替换为:
<p>
</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$getavatar_big = $this->get_avatar($uid, 'big', $avatartype);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$getavatar_middle = $this->get_avatar($uid, 'middle', $avatartype);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$getavatar_small = $this->get_avatar($uid, 'small', $avatartype);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$bigavatarfile = UC_DATADIR.'./avatar/'.$getavatar_big;</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$middleavatarfile = UC_DATADIR.'./avatar/'.$getavatar_middle;</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$smallavatarfile = UC_DATADIR.'./avatar/'.$getavatar_small;</p>
这一步是取得头像路径。接下来查找:
<span class="Apple-tab-span" style="white-space:pre"> </span>return '<?xml version="1.0" ?><root><face success="1"/></root>';
在前方加入:
<p><span class="Apple-tab-span" style="white-space:pre"> </span>$uccdnip = UC_CDNIP; //在 data/config.inc.php 中设置UC的CDN服务器IP,用于通知刷新头像</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$avatarurl = 'https://'.$uccdnip.'/purge/data/avatar/';</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$uchostname = stream_context_create(array('http' => array('header' => 'Host: '.$_SERVER['SERVER_NAME'])));</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_get_contents($avatarurl.$getavatar_big, NULL, $uchostname);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_get_contents($avatarurl.$getavatar_middle, NULL, $uchostname);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_get_contents($avatarurl.$getavatar_small, NULL, $uchostname);</p>
上传覆盖即可。
附:若你要在用户上传头像后点击“完成”时自动刷新头像上传页面,按照以下教程操作:
在 home/spacecp_avatar.htm 模板中查找:
<p><span class="Apple-tab-span" style="white-space:pre"> </span>if(redirecturl) {</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>$('retpre').innerHTML = '<a href="' + redirecturl + '">{lang previous_page}</a>';</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>}</p>
在其下方新增:
<p><span class="Apple-tab-span" style="white-space:pre"> </span>function updateavatar() { </p><p><span class="Apple-tab-span" style="white-space:pre"> </span>window.location.reload(); </p><p><span class="Apple-tab-span" style="white-space:pre"> </span>}</p>
上传并更新缓存即可。
4、管理员清除头像时,同步清除CDN服务器上的头像缓存。
打开 uc_server/model/user.php ,查找:
<p><span class="Apple-tab-span" style="white-space:pre"> </span>foreach((array)$uidsarr as $uid) {</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'big', 'real')) && unlink($avatar_file);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'middle', 'real')) && unlink($avatar_file);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'small', 'real')) && unlink($avatar_file);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'big')) && unlink($avatar_file);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'middle')) && unlink($avatar_file);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'small')) && unlink($avatar_file);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>}</p>
替换为:
$uccdnip = UC_CDNIP; //在 data/config.inc.php 中设置UC的CDN服务器IP,用于通知刷新头像
<p><span class="Apple-tab-span" style="white-space:pre"> </span>$uchostname = stream_context_create(array('http' => array('header' => 'Host: '.$_SERVER['SERVER_NAME'])));</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>foreach((array)$uidsarr as $uid) {</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'big', 'real')) && unlink($avatar_file) && file_get_contents(str_replace(UC_DATADIR.'./','https://'.$uccdnip.'/purge/data/',$avatar_file), NULL, $uchostname);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'middle', 'real')) && unlink($avatar_file) && file_get_contents(str_replace(UC_DATADIR.'./','https://'.$uccdnip.'/purge/data/',$avatar_file), NULL, $uchostname);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'small', 'real')) && unlink($avatar_file) && file_get_contents(str_replace(UC_DATADIR.'./','https://'.$uccdnip.'/purge/data/',$avatar_file), NULL, $uchostname);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'big')) && unlink($avatar_file) && file_get_contents(str_replace(UC_DATADIR.'./','https://'.$uccdnip.'/purge/data/',$avatar_file), NULL, $uchostname);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'middle')) && unlink($avatar_file) && file_get_contents(str_replace(UC_DATADIR.'./','https://'.$uccdnip.'/purge/data/',$avatar_file), NULL, $uchostname);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'small')) && unlink($avatar_file) && file_get_contents(str_replace(UC_DATADIR.'./','https://'.$uccdnip.'/purge/data/',$avatar_file), NULL, $uchostname);</p><p><span class="Apple-tab-span" style="white-space:pre"> </span>}</p>
上传覆盖即可。
历史资源提醒--必看
该页面资源/教程来自原魔趣吧历史资源转移,因发布历史久远,部分资源/教程可能已失效或无法在最新版程序中安装使用!DZ资源建议在Discuz3.4及以下版本使用,PHP版本建议5.6。资源仅提供做代码研究学习使用!
因改版,部分贴内链接将无法正常跳转,如链接失效或未正常跳转,请利用站内搜索功能搜索资源名称获取对应资源!
最新回复 (0)