每日下载次数限制php,织梦实现会员限制用户单日下载软件资源的上限方法

这篇文章主要为大家详细介绍了织梦实现会员限制用户单日下载软件资源的上限方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴。

使用织梦做过下载站点的朋友可能知道,织梦的下载站会员是可以如果满足条件一日内是可以无限制下载的,这个对于某些“不太地道的”用户可 能会给服务器早成非常大的压力,这个时候我们一般是希望通过二次开发实现这样一种功能,对单用户会员实现单日下载次数的限制。说得直白一点就是限制会员每天的下载次数。说干就干,下面是361源码给大家分享的实现办法,如果对您有帮助请给个赞或者给我们技术一些狗粮打赏,如果您觉得没什么实际的意义也感谢您的访问:

ac1cff5e0569101801c409b43e0a85ef.png

1、首先在数据表dede_member增加一个字段记录日期和当日下载的软件的ID组成的一个字串,例如:“201701113|1##2##3”,这个样子我用的是varchar类型长度255,默认值就是“201701113|1##2##3”

2、在后台-系统-系统基本参数-增加一个系统参数,我选择分类是站点设置,这里主要是设置下载的上限值,类型数字型,说明“单用户单日下载次数上限”,名称是“cfg_dlimit”,测试期间我设置的是3

3、在plus目录下找到download.php在如下位置增加下面一段代码(大约190行之下,会员级别判断之下)://判断下载次数是否达到当日上限

if($cfg_ml->M_Rank > $needRank && $needMoney > 0){

if(isset($GLOBALS['cfg_dlimit']) && $GLOBALS['cfg_dlimit'] > 0 ){

$dtSql = "SELECT `dtime` FROM `dede_member` WHERE `mid`='{$cfg_ml->M_ID}'";

$dt = $dsql->GetOne($dtSql);

if($dt['dtime'] == ''){

#没有对应记录,构建并记录更新用户记录

$dtStr = date('Ymd')."|".$id;

$updtsql = "UPDATE `dede_member` SET `dtime`='{$dtStr}' WHERE `mid`='{$cfg_ml->M_ID}'";

$dsql->ExecuteNoneQuery($updtsql);

}else{

#有记录,开始拆分判断并且进行计算处理

$tmp = explode('|', $dt['dtime']);

#判断记录日期是否是今天,是则返回剩余次数,不是则返回系统限制上限

$today = date('Ymd');

if($today == $tmp[0]){

$arr = explode('##',$tmp[1]);

#判断当前id是否包含在内

if(!in_array($id, $arr)){

#判断总下载次数

if(count($arr) >=  $GLOBALS['cfg_dlimit']){

#超限,不予下载

$msgtitle = "你不能下载软件:{$arctitle}!";

$moremsg = "你今日的下载上限 ".$GLOBALS['cfg_dlimit']." 次 已满!";

include_once(DEDETEMPLATE.'/plus/view_msg.htm');

exit(0);

}else{

$newArr = array_merge($arr,[$id]);

// echo $id;

// print_r($arr);

// print_r($newArr);

// //echo $a = implode(',', $newArr);

$dtNew = date('Ymd')."|".implode('##', $newArr);

#未超限,更新下载id记录

$dtInsert = "UPDATE `dede_member` SET `dtime`='{$dtNew}' WHERE `mid`='{$cfg_ml->M_ID}'";

$dsql->ExecNoneQuery($dtInsert);

}

}

}else{

//echo 7;

#不是今天,那么构建

$dtStr = date('Ymd')."|".$id;

$updtsql = "UPDATE `dede_member` SET `dtime`='{$dtStr}' WHERE `mid`='{$cfg_ml->M_ID}'";

$dsql->ExecuteNoneQuery($updtsql);

}

}

}//-----

}

逻辑是,指定下载权限以上的用户受限,小于或者等于权限的用户不受限,免费资源不受限,重复下载不计次数。

4、如果亲想在后台显示用户当日剩余的下载次数,那么修改如下两个文件,dede/member_main.php和dede/templets/member_main.htm

dede/member_main.php 文件最下面增加://

function GetDtime($dt){

if($dt == ''){

return $GLOBALS['cfg_dlimit'];

}else{

$tmp = explode('|', $dt);

#判断记录日期是否是今天,是则返回剩余次数,不是则返回系统限制上限

$today = date('Ymd');

if($today == $tmp[0]){

$arr = explode('##',$tmp[1]);

return is_array($arr) ? $GLOBALS['cfg_dlimit'] - count($arr) : $GLOBALS['cfg_dlimit'];

}else{

return $GLOBALS['cfg_dlimit'];

}

}

}

dede/templets/member_main.htm 文件修改第130行:金币:{dede:field.money /} 积分:{dede:field.scores /}

修改为:金币:{dede:field.money /} 积分:{dede:field.scores /} 剩下:{dede:field.dtime function="GetDtime(@me)" /}

后台在注册会员别变即可查看到需要的值

5、如果想在用户中心显示当前登录会员的当日下载剩余次数,那么修改 include/memberlogin.class.php,在第390行之下(重置用户信息之下),增加如下代码:/**

获取当前用户当然下载限制剩余量

*/

function GetDtime($dsql){

$mid = $this->M_ID;

$dt = $dsql->GetOne("Select `dtime` from `dede_member` where mid='$mid' ");

if($dt['dtime'] == ''){

return $GLOBALS['cfg_dlimit'];

}else{

$tmp = explode('|', $dt['dtime']);

#判断记录日期是否是今天,是则返回剩余次数,不是则返回系统限制上限

$today = date('Ymd');

if($today == $tmp[0]){

$arr = explode('##',$tmp[1]);

return is_array($arr) ? $GLOBALS['cfg_dlimit'] - count($arr) : $GLOBALS['cfg_dlimit'];

}else{

return $GLOBALS['cfg_dlimit'];

}

}

}

然后在用户中心使用 <?php echo $cfg_ml->GetDtime($dsql); ?> 即可显示剩余的次数。

到这里就完成了改造,有需求的朋友可以自己尝试一下,处理前注意备份文件和数据库,防止出错!

以上就是织梦实现会员限制用户单日下载软件资源的上限方法的全部内容,希望对大家的学习和解决疑问有所帮助,也希望大家多多支持361模板网。

感谢打赏,我们会为大家提供更多优质资源!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值