每日下载次数限制php,织梦实现会员限制用户单日下载软件资源的上限方法
這篇文章主要為大家詳細介紹了織夢實現會員限制用戶單日下載軟件資源的上限方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,有需要的朋友可以收藏方便以后借鑒。
使用織夢做過下載站點的朋友可能知道,織夢的下載站會員是可以如果滿足條件一日內是可以無限制下載的,這個對于某些“不太地道的”用戶可 能會給服務器早成非常大的壓力,這個時候我們一般是希望通過二次開發實現這樣一種功能,對單用戶會員實現單日下載次數的限制。說得直白一點就是限制會員每天的下載次數。說干就干,下面是361源碼給大家分享的實現辦法,如果對您有幫助請給個贊或者給我們技術一些狗糧打賞,如果您覺得沒什么實際的意義也感謝您的訪問:
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模板網。
感謝打賞,我們會為大家提供更多優質資源!
總結
以上是生活随笔為你收集整理的每日下载次数限制php,织梦实现会员限制用户单日下载软件资源的上限方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SaaS企业级免费市场似乎即将过去
- 下一篇: #ifndef的详细意思