【即将关站通知●已关闭注册功能】,倒计时剩余:计算中...

[discuz建站技术] Discuz! X 上传头像到UCenter时自动刷新CDN服务器上的头像缓存

[复制链接]
魔趣吧站长魔趣吧官方成员 实名认证 发表于 2018-9-20 17:18:54 | 显示全部楼层 |阅读模式
应用场景:为减少源站流量,我们可以永久缓存用户的头像,只在用户上传新头像时,才刷新CDN服务器上的缓存。& m3 a( }' e1 r

4 `  V8 l, h7 r' E" R本文案例中的CDN服务器环境如下,仅供参考:8 Q) M% y) N( j  ^6 Y
Nginx,已安装 cache-purge 扩展,通过请求 $host/purge/$uri 的方式清除缓存。所使用的域名与源站一致。. }6 Q! R0 ]5 V$ _$ r- g
: G% c9 X6 B& ~( E: Y0 M$ ~
1、首先在CDN服务器中配置清除规则,将源站服务器IP设置为允许;
9 R2 t2 x4 d" ^0 d5 X/ }% ?* d  F* M) T6 K9 _7 A
2、打开 uc_server/data/config.inc.php ,在末尾加入CDN服务器的IP地址,便于统一调用和修改。0 d) a5 J6 P3 X' J2 Q/ s. l' Q
  1. define('UC_CDNIP', '123.123.123.123');
复制代码
3、打开 uc_server/control/user.php ,添加上传头像后自动清除CDN缓存的功能。1 [: ~5 b  y! G/ p/ i7 Q

/ S+ E5 e, m& e  I查找:
  1. <p>
  2. </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>
复制代码
替换为:
  1. <p>
  2. </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>
复制代码
这一步是取得头像路径。接下来查找:
9 Z0 N& n3 _& Z3 p! }6 C) v8 _. O$ u! y8 o' q
       
  1. <span class="Apple-tab-span" style="white-space:pre">                </span>return '<?xml version="1.0" ?><root><face success="1"/></root>';
复制代码
在前方加入:- r; O9 _4 ~8 @+ ]* u" k
  1. <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>
复制代码
上传覆盖即可。# J7 `, k* d5 ]8 p+ t

0 r1 a" |9 k. ^) g) J0 {$ p2 H附:若你要在用户上传头像后点击“完成”时自动刷新头像上传页面,按照以下教程操作:* Z$ l/ r* q# `8 x
在 home/spacecp_avatar.htm 模板中查找:
  1. <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>
复制代码
在其下方新增:
  1. <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>
复制代码
上传并更新缓存即可。* W8 D2 _7 c* N5 Y6 S8 Y
8 F3 N" i9 b, S( ~

: q+ l; y$ I' Q% F# s# U4、管理员清除头像时,同步清除CDN服务器上的头像缓存。' C  F+ }) W0 ^0 @: E

, q. B/ X* Q# |7 S/ [打开 uc_server/model/user.php ,查找:# G" u, K. n8 [% U5 w4 [4 N
  1. <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>
复制代码
替换为:' @: v) Z8 f( C: N( ]4 T3 p
5 Y; u; z# @+ w& l5 x3 R
                $uccdnip = UC_CDNIP; //在 data/config.inc.php 中设置UC的CDN服务器IP,用于通知刷新头像
  1. <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>
复制代码
上传覆盖即可。' s( T3 z" p/ G

- E% {& E  ?, r

魔趣吧版权声明1,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2,本文内容仅代表作者本人观点,不代表本网站立场,作者文责自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3,本文内容,包括但不限于源码、文字、图片等,仅供参考使用,本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容
4,如您认为本文内容侵犯了您的权益,请与我们联系!我们将在5个工作日内做出处理!本站保留全部修改、解释、更新本声明的权利魔趣吧

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线支持
关闭
欢迎来到魔趣吧
如果你有建站技术问题、仿站需求、模板插件修改需求,请联系我们的技术支持!高效率,低价格的帮你搞定!
请认准魔趣吧唯一官网:www.moqu8.com,谨防假冒网站!

一般问题请到【求助区】发帖咨询(免费)!

邮箱咨询:
winkill2012@qq.com

邮箱咨询需注明:资源地址+本站用户名+具体问题,三者缺一不做处理。非本站资源不处理!
在线支持
快速回复 返回列表

关于魔趣吧|魔趣建站

魔趣吧,志在打造全国最大的建站资源共享平台。 本站提供海量免费的建站资源,包括WordPress模板、Discuz精仿模板、PHPWind模板、phpcms模板、Discuz精仿插件、帝国cms模板、织梦模板等上万精品模板!同时,提供各种建站素材、JS特效、整站程序源码!
服务中文站长,传播分享精神!建站,就来魔趣吧!!
2015-2024 魔趣吧 ( 豫ICP备2021024354号 )   豫公网安备41030402000182号 百度统计
HTTPS安全认证
|网站地图 | 已运行:天 
温馨提示:本站所有资源、教程、源码,不得用于非法站点及用途,否则,本站将终止提供任何服务! Powered by Discuz! Licensed