帝國(guó)cms實(shí)現(xiàn)即彈出下載txt等格式

字號(hào):


    測(cè)試版本:帝國(guó)cms6.5
    功能位置:后臺(tái)->其他管理->下載模型管理->管理地址前綴
    相關(guān)函數(shù):e/class/downsysfun.php dotypefordownurl() , qdownloadfile() , downsoft()
    功能解釋:
    header:使用header轉(zhuǎn)向,通常設(shè)為這個(gè)。
    meta:直接轉(zhuǎn)自,如果是ftp地址推薦選擇這個(gè)。
    read:使用php程序讀取,防盜鏈較強(qiáng),但較占資源,服務(wù)器本地小文件可選擇。
    帝國(guó)cms彈出下載txt,xls等說(shuō)明
    1.看下面粘貼的帝國(guó)原函數(shù)dotypefordownurl() header 與 meta 兩種方式都使用的真實(shí)地址,在這兩種方式下瀏覽器不能讀取的文件格式,例如rar,zip等將直接直接彈出一個(gè)真實(shí)地址下載,txt等瀏覽器可讀的文件格式則直接在線瀏覽;
    2.默認(rèn)不選擇前綴的情況下,使用是header
    3.read 這種方式下是利用php讀取文件,并傳遞給瀏覽器,無(wú)論 rar 還是txt都會(huì)彈出下載,而不是瀏覽器直接讀取,彈出的地址也是加密的地址類似:xxx.com/enews=downsoft& classid=39&id=11&pathid=0&pass=7b9516932a88d44b4e4610e209f6288d&p=22:::j2qcrbgqmrxk
    4.read的加密地址判斷是否有下載權(quán)限,也就是地址是否正確是由e/class/downsysfun.php中downsoft()函數(shù)來(lái)判 斷的,經(jīng)測(cè)試如果不更改后臺(tái)->系統(tǒng)設(shè)置->模型設(shè)置->下載驗(yàn)證碼 的情況下流傳出去是可以持續(xù)被下載的(沒(méi)有用戶組,積分等判斷限制 如果要避免那么e/class/downsysfun.php 第一行 $downsys_checkip=0; 中的0改為1),帝國(guó)cms也是通過(guò)這個(gè)方式來(lái)防盜鏈;
    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; 
    } 
    相關(guān)函數(shù)參閱
    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]; 
    //驗(yàn)證碼 
    $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); 
    } 
    //區(qū)分下載地址 
    $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]; 
    //下載權(quán)限 
    if($downgroup) 
    { 
    $userid=(int)$userid; 
    //取得會(huì)員資料 
    $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);} 
    //下載次數(shù)限制 
    $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); 
    } 
    //點(diǎn)數(shù)是否足夠 
    $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) 
    {} 
    //點(diǎn)數(shù) 
    else 
    { 
    if($showdown_r[3]>$u[$user_userfen]) 
    { 
    printerror(notenoughfen,history.go(-1),1); 
    } 
    //去除點(diǎn)數(shù) 
    $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); 
    } 
    } 
    //更新用戶下載次數(shù) 
    if($setuserday) 
    { 
    $usql=$empire->query($setuserday); 
    } 
    } 
    //總下載數(shù)據(jù)增一 
    $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); 
    }