帝國(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);
    }