帝国cms实现即弹出下载txt等格式

时间:2023年11月04日

/

来源:网络

/

编辑:佚名

温馨提示:78模板网小编为您整理了“帝国cms实现即弹出下载txt等格式”,方便广大网友查阅!
测试版本:帝国cms6.5
功能位置:后台->其他管理->下载模型管理->管理地址前缀
相关函数:e/class/downsysfun.php dotypefordownurl() , qdownloadfile() , downsoft()
功能解释:
header:使用header转向,通常设为这个。
meta:直接转自,如果是ftp地址推荐选择这个。
read:使用php程序读取,防盗链较强,但较占资源,服务器本地小文件可选择。
帝国cms弹出下载txt,xls等说明
1.看下面粘贴的帝国原函数dotypefordownurl() header 与 meta 两种方式都使用的真实地址,在这两种方式下浏览器不能读取的文件格式,例如rar,zip等将直接直接弹出一个真实地址下载,txt等浏览器可读的文件格式则直接在线浏览;
2.默认不选择前缀的情况下,使用是header
3.read 这种方式下是利用php读取文件,并传递给浏览器,无论 rar 还是txt都会弹出下载,而不是浏览器直接读取,弹出的地址也是加密的地址类似:xxx.com/enews=downsoft& classid=39&id=11&pathid=0&pass=7b9516932a88d44b4e4610e209f6288d&p=22:::j2qcrbgqmrxk
4.read的加密地址判断是否有下载权限,也就是地址是否正确是由e/class/downsysfun.php中downsoft()函数来判 断的,经测试如果不更改后台->系统设置->模型设置->下载验证码 的情况下流传出去是可以持续被下载的(没有用户组,积分等判断限制 如果要避免那么e/class/downsysfun.php 第一行 $downsys_checkip=0; 中的0改为1),帝国cms也是通过这个方式来防盗链;
5.如果我不想使用下载地址前缀,而让txt等格式可以弹出下载,那么你可以在e/class/downsysfun.php中搜索dotypefordownurl($downurl,$downurlr['downtype']);上一行加入如下代码:
view plaincopy to clipboardprint?
//trylife add check type 20101231 
//不使用下载地址前缀 让txt等浏览器可读类型文件弹出下载 
//a.f4 
$type2r=array(.xls,.txt,); 
if(in_array(getfiletype($downurl),$type2r)) 

$downurlr['downtype']=2; 

相关函数参阅
view plaincopy to clipboardprint?
//ecms e/class/downsysfun.php 
function downsoft($classid,$id,$pathid,$p,$pass){ 
global $empire,$public_r,$level_r,$class_r,$emod_r,$user_tablename,$user_userid,$user_rnd,$user_group,$user_userfen,$user_userdate,$user_username,$dbtbpre; 
$id=(int)$id; 
$classid=(int)$classid; 
$pathid=(int)$pathid; 
if(emptyempty($id)||emptyempty($p)||emptyempty($classid)) 

printerror(errorurl,history.go(-1),1); 

$p=reppostvar($p); 
$p_r=explode(:::,$p); 
$userid=$p_r[0]; 
$rnd=$p_r[1]; 
//验证码 
$cpass=md5(returndownsyscheckip().wm_chief.$public_r[downpass].$userid); 
if($cpass<>$pass) 

printerror(faildownpass,history.go(-1),1); 

//表不存在 
if(emptyempty($class_r[$classid][tbname])) 

printerror(exiestsoftid,history.go(-1),1); 

$mid=$class_r[$classid][modid]; 
$tbname=$class_r[$classid][tbname]; 
$ok=1; 
$r=$empire->fetch1(select * from {$dbtbpre}ecms_.$tbname. where id='$id' and classid='$classid'); 
if(emptyempty($r[id])) 

printerror(exiestsoftid,history.go(-1),1); 

//副表 
if($emod_r[$mid]['tbdataf']&&$emod_r[$mid]['tbdataf']<>',') 

$selectdataf=substr($emod_r[$mid]['tbdataf'],1,-1); 
$finfor=$empire->fetch1(select .$selectdataf. from {$dbtbpre}ecms_.$tbname._data_.$r[stb]. where id='$r[id]'); 
$r=array_merge($r,$finfor); 

//区分下载地址 
$path_r=explode(rn,$r[downpath]); 
if(!$path_r[$pathid]) 

printerror(exiestsoftid,history.go(-1),1); 

$showdown_r=explode(::::::,$path_r[$pathid]); 
$downgroup=$showdown_r[2]; 
//下载权限 
if($downgroup) 

$userid=(int)$userid; 
//取得会员资料 
$u=$empire->fetch1(select * from .$user_tablename. where .$user_userid.='$userid' and .$user_rnd.='$rnd'); 
if(emptyempty($u[$user_userid])) 
{printerror(mustsingleuser,history.go(-1),1);} 
//下载次数限制 
$setuserday=; 
if($level_r[$u[$user_group]][daydown]) 

$setuserday=docheckmdownnum($userid,$u[$user_group]); 

if($level_r[$downgroup][level]>$level_r[$u[$user_group]][level]) 

printerror(notdownlevel,history.go(-1),1); 

//点数是否足够 
$showdown_r[3]=intval($showdown_r[3]); 
if($showdown_r[3]) 

//---------是否有历史记录 
$bakr=$empire->fetch1(select id,truetime from {$dbtbpre}enewsdownrecord where id='$id' and classid='$classid' and userid='$userid' and pathid='$pathid' and online=0 order by truetime desc limit 1); 
if($bakr[id]&&(time()-$bakr[truetime]<=$public_r[redodown]*3600)) 
{} 
else 

//包月卡 
if($u[$user_userdate]-time()>0) 
{} 
//点数 
else 

if($showdown_r[3]>$u[$user_userfen]) 

printerror(notenoughfen,history.go(-1),1); 

//去除点数 
$usql=$empire->query(update .$user_tablename. set .$user_userfen.=.$user_userfen.-.$showdown_r[3]. where .$user_userid.='$userid'); 

//备份下载记录 
$utfusername=doutfandgbk($u[$user_username],1); 
bakdown($classid,$id,$pathid,$userid,$utfusername,$r[title],$showdown_r[3],0); 


//更新用户下载次数 
if($setuserday) 

$usql=$empire->query($setuserday); 


//总下载数据增一 
$usql=$empire->query(update {$dbtbpre}ecms_.$class_r[$classid][tbname]. set totaldown=totaldown+1 where id='$id'); 
$downurl=stripslashes($showdown_r[1]); 
$downurlr=returndownqzpath($downurl,$showdown_r[4]); 
$downurl=$downurlr['repath']; 
//防盗链 
@include(ecms_path.e/class/enpath.php); 
$downurl=doendownpath($downurl); 
db_close(); 
$empire=null; 
//trylife add check type 20101231 
//不使用下载地址前缀 让txt等浏览器可读类型文件弹出下载 
//a.f4 
$type2r=array(.doc,.xls,.docx,.ppt,.pptx,.txt,pdf,); 
if(in_array(getfiletype($downurl),$type2r)) 

$downurlr['downtype']=2; 

//trylife add check type 20101231 [e] 
dotypefordownurl($downurl,$downurlr['downtype']); 

//下载操作 
function dotypefordownurl($downurl,$type=0){ 
global $public_r; 
if($type==1)//meta 

echo<meta content='0;url=$downurl' http-equiv='refresh'>; 

elseif($type==2)//read 

qdownloadfile($downurl); 

else//header 

header(location:$downurl); 

exit(); 

//下载 
function qdownloadfile($file){ 
global $public_r; 
if(strstr($file,)) 

$exp=; 

elseif(strstr($file,/)) 

$exp=/; 

else 

header(location:$file); 
exit(); 

if(strstr($file,$exp.e.$exp)||strstr($file,..)||strstr($file,?)||strstr($file,#)) 

header(location:$file); 
exit(); 

if(strstr($file,$public_r[fileurl])) 

$file=str_replace($public_r[fileurl],'/d/file/',$file); 

if(!strstr($file,://)) 

if(!file_exists($file)) 

$file=../...$file; 


$filename=getdownurlfilename($file,$exp); 
if(empty($filename)) 

header(location:$file); 
exit(); 

//下载 
header(content-type: application/octet-stream); 
//header(accept-ranges: bytes); 
//header(accept-length: .$filesize); 
header(content-disposition: attachment; filename=.$filename); 
echo readfiletext($file); 
猜你需要

豫ICP备2021026617号-1  豫公网安备:41172602000185   Copyright © 2021-2028 www.78moban.com/ All Rights Reserved

本站作品均来自互联网,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如有侵犯您的版权,请联系 1565229909#qq.com(把#改成@),我们将立即处理。