DZ的附件7天内重复下载不重复扣分
DZX3.1的附件下载依然有BUG,这个扣分不是出售附件,而是指后台积分策略中设置的每次下载附件所扣的小积分,目的是为了防止迅雷下载,或者被盗链。但这个下载扣分的问题从7.0时代一直存在,具体表现在:
1、下载自己上传的附件,要扣积分。
2、重复下载同一个附件,次次都扣积分。格东站长网
这两点显然是不合理的,下载自己的附件怎么能扣分呢?如果网络中断,或者误点击了,就再次扣分,很冤枉。之前的版本我都对这些问题作过修改,现在3.1版的代码结构不同,又要重新改代码。
DZ论坛有人出示过修改代码的方法,但有点问题,而且改得不太到位。只照顾了重复扣分的问题,而不排除下载自己的附件。另外,不管扣不扣分都给出积分提示,这让用户很担心的。正确的做法应该是:如果不扣积分,就直接开始下载。如果扣积分,才提示积分扣了多少。
具体修改方法:
1、创建一个记录附件扣分下载的数据表,运行SQL代码即可(其中CHARSET=gbk是编码,如果是utf8,要改为=utf8):
CREATE TABLE IF NOT EXISTS `pre_forum_attachment_once` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `aid` mediumint(8) unsigned NOT NULL DEFAULT '0', `uid` mediumint(8) unsigned NOT NULL DEFAULT '0',`dateline` int(10) unsigned NOT NULL DEFAULT '0',PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=1 ;
2、修改附件下载权限,打开/source/module/forum/forum_attachment.php,找到
if(!$isimage && !($_G['group']['exempt'] & $exemptvalue)) {
这句的含义是,如果是非图片类的附件并且在后台规定了下载附件可以不扣积分,就直接下载附件。这里要添加两个额外条件:下载自己的附件、数据表中已记录扣过积分的。改成这样:
if(!$isimage && !($_G['group']['exempt'] & $exemptvalue) && $_G['uid'] != $attach['uid'] && !(DB::fetch_first("SELECT id FROM ".DB::table('forum_attachment_once')." WHERE aid='$aid' AND uid='$_G[uid]'"))) {
这样凡是不用扣分的,就什么提示也没有,直接下载。
3、对扣了分的,写入数据表。打开/source/module/forum/forum_misc.php,找到
$getattachcredits = updatecreditbyaction('getattach', $_G['uid'], array(), '', 1, 1, $thread['fid']);
这句是扣下载者积分的,扣掉之后就要把这个动作写进数据表。在之下添加一句:
DB::query("insert into ".DB::table('forum_attachment_once')." (`aid`, `uid`, `dateline`) VALUES ('$aid', '$_G[uid]', '$_G[timestamp]')");
以上完成BUG的修补。不过时间一长,附件下载记录表会变得很大,也没必要长期记录着(当然也可以一直记着,永远不重复扣分)。可以用后台的计划任务定期清理过期的记录,比如7天过期,每天清理一次。
那就再做第4个动作:
4、计划任务。用以下代码创建一个PHP文件,命名为cron_clean_attachment.php或其它名字都可以,但要cron_开头。
<?phpif(!defined('IN_DISCUZ')) { exit('Access Denied'); }$deltime = $_G['timestamp'] - 3600*24*7; DB::query("delete from ".DB::table('forum_attachment_once')." where `dateline`<'$deltime'");?>
把文件上传到source/include/cron文件夹内。然后在后台添加新的计划任务,填写任务名为“自动清理附件下载记录”或其它自己喜欢的,脚本名为cron_clean_attachment.php,时间设置为每天的某点0分就可以了。然后勾选“可用”。
DZ的附件7天内重复下载不重复扣分相关推荐
- 线程 、GCD、NSOperation用法总结,重复下载,线程之间的通信
#import <pthread.h> // 创建线程 pthread_t myRestrict; pthread_create(&myRestrict,NULL, run,NUL ...
- 苹果用户在微信内打开下载链接如何不用跳转就能下载app
分析 由于微信引流具备快速性和高效的二次传播性,故众多商家纷纷选择微信推广为主要的推广方式.但在使用微信分享链接和营销方案的过程中经常会遇到分享链接在微信内被拦截从而无法打开或者打开后无法下载文件 的 ...
- DZ论坛附件大小限制问题
前面总结了.net的Dvbbs.Net 1.1文件上传限制问题,现在补充一下 修改DZ论坛附件大小的方法. 这里说的对DZ论坛附件大下的修改,不是简单的修改成2M大小,而是突破DZ论坛系统最大不超过1 ...
- 最新蓝白软件库iappv3源码+内置下载软件
正文: 最新蓝白软件库iappv3源码+内置下载软件,可设置会员,金币,免费下载权限,远程修改购卡地址公告通知客服信息等. 程序: wwvwd.lanzoux.com/iCgFT0b1lskh 图片:
- 如何快速实现微信内直接下载App?
App在进行推广时候需要在微信内进行网页宣传和裂变传播,微信作为最大的一个社交平台,对于第三方推广链接的审核越来越严格了,屏蔽了所有的下载链接. 推广链接在微信中转发时候会经常性的发生拦截,一但被拦截 ...
- 微信上h5页面点击文件下载链接没反应,微信内直接下载app方案
大家在使用微信分享转发链接的时候,都很容易碰到链接在微信中无法打开网页的问题.通常这种情况微信会给个提示 "已停止访问该网址" ,导致这个情况的因素有以下三点. 1.分享链接被多人 ...
- linux使用flock文件锁解决脚本周期内未执行完重复执行
linux使用flock文件锁解决脚本周期内未执行完重复执行 关于flock flock 是对于整个文件的建议性锁.也就是说,如果一个进程在一个文件(inode)上放了锁,那么其它进程是可以知道的.( ...
- 【组合数学】生成函数 ( 正整数拆分 | 重复有序拆分 | 不重复有序拆分 | 重复有序拆分方案数证明 )
文章目录 一.重复有序拆分 二.不重复有序拆分 1.无序拆分基本模型 2.全排列 三.重复有序拆分方案数证明 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式 ...
- 【咕嘎文本对比助手】如何两份手机号或文本对比去重,新旧两批号码如何快速的对比重复,找出重复和不重复的部分,单个文件如何找出重复,单个文件如何找出不重复下面关于五种逻辑做详细解答
在手机号码整理过程中,群发短信还有大数据分析等整理文件的过程中经常有号码重复 有人说excel有两列数据,怎么用vlookup查找两列数据是否有重复值?在SQL语句中就很好处理了not in 就完事了 ...
最新文章
- 二维数组存放多个字符串_二维数组中输出多个最值及其下标。(仅供参考)
- 基本类型和操作之富包装器
- linux运行python乱码_linux下python中文乱码解决方案详解
- java -PDF添加文本水印与图片水印
- Kubernetes + .NET Core 的落地实践
- [初级]Java命令学习系列(七)——javap
- Android自定义抛出异常
- 金钱工具类 MoneyUtils.java
- C++智能指针的“GC”
- 字符串解压缩c语言除哈夫曼,C语言实现压缩二例(示例代码)
- 强口令检测(使用正则表达式)
- aggs 聚合 取结果
- MySQL中MGR中SECONDARY节点磁盘满,导致mysqld进程被OOM Killed
- 博物馆施工组织设计方案
- ILSVRC-ImageNet历年竞赛冠军
- window.print打印pdf
- 电脑上可贴至桌面显示的便签软件
- 基于罗格里德矩阵的坐标转换7参数求取
- Hive操作——删除表(drop、truncate)
- 躲避雪糕刺客?通过爬虫爬取雪糕价格