首頁  >  文章  >  php教程  >  PHP文件上传及下载源码

PHP文件上传及下载源码

WBOY
WBOY原創
2016-06-06 09:32:331173瀏覽

  一、文件上传

  前台页面:

<span style="color: #0000ff;"><span style="color: #ff00ff;">DOCTYPE html</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"><span style="color: #800000;">html</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"><span style="color: #800000;">head</span><span style="color: #0000ff;">></span>
    <span style="color: #0000ff;"><span style="color: #800000;">meta </span><span style="color: #ff0000;">charset</span><span style="color: #0000ff;">="utf-8"</span><span style="color: #0000ff;">></span>
    <span style="color: #0000ff;"><span style="color: #800000;">title</span><span style="color: #0000ff;">></span>文件上传<span style="color: #0000ff;"></span><span style="color: #800000;">title</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></span><span style="color: #800000;">head</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"><span style="color: #800000;">body</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"><span style="color: #800000;">div</span><span style="color: #0000ff;">></span>
    <span style="color: #0000ff;"><span style="color: #800000;">form </span><span style="color: #ff0000;">method</span><span style="color: #0000ff;">="post"</span><span style="color: #ff0000;"> action</span><span style="color: #0000ff;">="upload.php"</span><span style="color: #ff0000;"> enctype</span><span style="color: #0000ff;">="multipart/form-data"</span> <span style="color: #0000ff;">></span><span style="color: #000000;">
        用户名</span><span style="color: #0000ff;"><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span><span style="color: #ff0000;"> name</span><span style="color: #0000ff;">="username"</span><span style="color: #0000ff;">></span><span style="color: #800000;">input</span><span style="color: #0000ff;">></span>
        <span style="color: #0000ff;"><span style="color: #800000;">br</span><span style="color: #0000ff;">></span><span style="color: #000000;">
        文件简单介绍</span><span style="color: #0000ff;"><span style="color: #800000;">br</span><span style="color: #0000ff;">><span style="color: #800000;">textarea </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="fileintro"</span><span style="color: #ff0000;"> rows</span><span style="color: #0000ff;">="8"</span><span style="color: #ff0000;"> cols</span><span style="color: #0000ff;">="50"</span><span style="color: #0000ff;">></span><span style="color: #800000;">textarea</span><span style="color: #0000ff;">></span>
        <span style="color: #0000ff;"><span style="color: #800000;">br</span><span style="color: #0000ff;">></span>选择要上传的文件<span style="color: #0000ff;"><span style="color: #800000;">br</span><span style="color: #0000ff;">><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="file"</span><span style="color: #ff0000;"> name</span><span style="color: #0000ff;">="myfile"</span><span style="color: #0000ff;">></span><span style="color: #800000;">input</span><span style="color: #0000ff;">><span style="color: #800000;">br</span><span style="color: #0000ff;">></span>
        <span style="color: #0000ff;"><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="submit"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="上传文件"</span><span style="color: #0000ff;">></span><span style="color: #800000;">input</span><span style="color: #0000ff;">></span>
    <span style="color: #0000ff;"></span><span style="color: #800000;">form</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></span><span style="color: #800000;">body</span><span style="color: #0000ff;">></span>
<span style="color: #0000ff;"></span><span style="color: #800000;">html</span><span style="color: #0000ff;">></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

  后台处理:

<span style="color: #000000;">php
</span><span style="color: #008000;">//</span><span style="color: #008000;">接收提交页面传送的相关信息</span>
<span style="color: #800080;">$name</span> = <span style="color: #800080;">$_POST</span>['username'<span style="color: #000000;">];
</span><span style="color: #800080;">$intro</span> = <span style="color: #800080;">$_POST</span>['fileintro'<span style="color: #000000;">];
</span><span style="color: #008000;">//</span><span style="color: #008000;">$_FILES中存放着文件的相关信息
// echo "<pre class="brush:php;toolbar:false">";
// print_r($_FILES);
// echo "
"; //可以在这里对文件大小进行限制 /*$filesize = $_FILES['myfile']['size']; if($filesize>2*1024*1024){ echo "文件过大,不能上传"; exit(); }*/ //可以对文件类型进行限制 /*$filetype = $_FILES['myfile']['type']; if($filetype!='image/jpg'&&$filetype!='application/pdf'){ echo "文件类型只能是jpg和pdf"; exit(); }*/ if (is_uploaded_file($_FILES['myfile']['tmp_name'])) { //把文件转存到你希望存放的目录 $uploaded = $_FILES['myfile']['tmp_name']; //每个用户动态创建一个文件夹 $userpath = $_SERVER['DOCUMENT_ROOT']."/up/".$name; //判断该用户是否已经有文件夹 if(!file_exists($userpath)){ mkdir($userpath); } //防止同一用户上传同名文件,可在文件中添加时间戳。 //$moveto = $userpath."/".time().$_FILES['myfile']['name']; //或者对文件名进行修改,但是需要使用字符串处理截得文件后缀名 $truename = $_FILES['myfile']['name']; $moveto = $userpath."/".time().substr($truename,strrpos($truename,".")); if(move_uploaded_file($uploaded,iconv("utf-8", "gb2312", $moveto))){ echo "上传文件".$_FILES['myfile']['name']."成功"; }else{ echo "上传文件".$_FILES['myfile']['name']."失败"; } }else{ echo "上传文件".$FILES['myfile']['name']."失败"; } ?>

  二、文件下载:

  单文件下载:

 <span style="color: #000000;">php
    </span><span style="color: #0000ff;">function</span> down_file(<span style="color: #800080;">$file_name</span>,<span style="color: #800080;">$file_path</span><span style="color: #000000;">){
    </span><span style="color: #008000;">//</span><span style="color: #008000;">$file_name = iconv("uft-8","gb2312",$file_name);    //如果文件名是中文,需要对中文名称转码gb2312
    //要下载的文件读取到服务器的内存中
    //服务器返回文件数据给浏览器
    //浏览器将文件写入用户指定的位置
    //1.判断文件是否存在</span>
    <span style="color: #0000ff;">if</span>(!<span style="color: #008080;">file_exists</span>(<span style="color: #800080;">$file_name</span><span style="color: #000000;">)){
        </span><span style="color: #0000ff;">echo</span> "111"<span style="color: #000000;">;
        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> ;
    }
    </span><span style="color: #800080;">$fp</span> = <span style="color: #008080;">fopen</span>(<span style="color: #800080;">$file_name</span>,"r"<span style="color: #000000;">);
    </span><span style="color: #800080;">$file_size</span> = <span style="color: #008080;">filesize</span>(<span style="color: #800080;">$file_name</span><span style="color: #000000;">);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">获取文件大小
    //可通过file_size限制浏览器下载文件大小。
    //返回的文件</span>
    <span style="color: #008080;">header</span>("Content-type:application/octet-stream"<span style="color: #000000;">);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">按字节大小返回</span>
    <span style="color: #008080;">header</span>("Accept-Ranges:bytes"<span style="color: #000000;">);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">返回文件大小</span>
    <span style="color: #008080;">header</span>("Accept-Length:<span style="color: #800080;">$file_size</span>"<span style="color: #000000;">);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">客户端弹出对话框,对应的文件名</span>
    <span style="color: #008080;">header</span>("Content-Disposition:attachment;filename=".<span style="color: #800080;">$file_name</span><span style="color: #000000;">);
    </span><span style="color: #800080;">$buffer</span> = 1024<span style="color: #000000;">;  
    </span><span style="color: #008000;">//</span><span style="color: #008000;">定义缓冲区
    //为了下载的安全,最好使用文件字节读取计数器</span>
    <span style="color: #800080;">$file_count</span> = 0<span style="color: #000000;">;
    </span><span style="color: #008000;">//</span><span style="color: #008000;">feof用于判断文件是否读取到文档尾</span>
    <span style="color: #0000ff;">while</span>(!<span style="color: #008080;">feof</span>(<span style="color: #800080;">$fp</span>) && (<span style="color: #800080;">$file_size</span>-<span style="color: #800080;">$file_count</span>>0<span style="color: #000000;">)){
    </span><span style="color: #800080;">$file_data</span> = <span style="color: #008080;">fread</span>(<span style="color: #800080;">$fp</span>,<span style="color: #800080;">$buffer</span><span style="color: #000000;">);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">统计读了多少个字节</span>
    <span style="color: #800080;">$file_count</span>+<span style="color: #800080;">$buffer</span><span style="color: #000000;">;
    </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$file_data</span><span style="color: #000000;">;   
    </span><span style="color: #008000;">//</span><span style="color: #008000;">把部分数据会送给浏览器</span>
<span style="color: #000000;">    }
    </span><span style="color: #008080;">fclose</span>(<span style="color: #800080;">$fp</span><span style="color: #000000;">);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">关闭文件</span>
<span style="color: #000000;">    }
</span>?>

  多个文件下载:

  DownList.php:

<a href="downprocess.php?filename=1.jpg">down</a><img  src="1.jpg"    style="max-width:90%" height="50px" alt="PHP文件上传及下载源码" ><br><br>
<a href="downprocess.php?filename=2.jpg">down</a><img  src="2.jpg"    style="max-width:90%" height="50px" alt="PHP文件上传及下载源码" ><br><br>
<a href="downprocess.php?filename=3.jpg">down</a><img  src="3.jpg"    style="max-width:90%" height="50px" alt="PHP文件上传及下载源码" ><br><br>
<a href="downprocess.php?filename=4.jpg">down</a><img  src="4.jpg"    style="max-width:90%" height="50px" alt="PHP文件上传及下载源码" ><br><br>

  downprocess.php:

<span style="color: #000000;">php
    </span><span style="color: #800080;">$filename</span> = <span style="color: #800080;">$_REQUEST</span>['filename'<span style="color: #000000;">];
    </span><span style="color: #0000ff;">function</span> down_file(<span style="color: #800080;">$file_name</span><span style="color: #000000;">){

    </span><span style="color: #0000ff;">if</span>(!<span style="color: #008080;">file_exists</span>(<span style="color: #800080;">$file_name</span><span style="color: #000000;">)){
        </span><span style="color: #0000ff;">echo</span> "111"<span style="color: #000000;">;
        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> ;
    }
    </span><span style="color: #800080;">$fp</span> = <span style="color: #008080;">fopen</span>(<span style="color: #800080;">$file_name</span>,"r"<span style="color: #000000;">);
    </span><span style="color: #800080;">$file_size</span> = <span style="color: #008080;">filesize</span>(<span style="color: #800080;">$file_name</span><span style="color: #000000;">);
    </span><span style="color: #008080;">header</span>("Content-type:application/octet-stream"<span style="color: #000000;">);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">按字节大小返回</span>
    <span style="color: #008080;">header</span>("Accept-Ranges:bytes"<span style="color: #000000;">);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">返回文件大小</span>
    <span style="color: #008080;">header</span>("Accept-Length:<span style="color: #800080;">$file_size</span>"<span style="color: #000000;">);
    </span><span style="color: #008000;">//</span><span style="color: #008000;">客户端弹出对话框,对应的文件名</span>
    <span style="color: #008080;">header</span>("Content-Disposition:attachment;filename=".<span style="color: #800080;">$file_name</span><span style="color: #000000;">);
    </span><span style="color: #800080;">$buffer</span> = 1024<span style="color: #000000;">;  
    </span><span style="color: #008000;">//</span><span style="color: #008000;">定义缓冲区</span>
    <span style="color: #800080;">$file_count</span> = 0<span style="color: #000000;">;
    </span><span style="color: #008000;">//</span><span style="color: #008000;">feof用于判断文件是否读取到文档尾</span>
    <span style="color: #0000ff;">while</span>(!<span style="color: #008080;">feof</span>(<span style="color: #800080;">$fp</span>) && (<span style="color: #800080;">$file_size</span>-<span style="color: #800080;">$file_count</span>>0<span style="color: #000000;">)){
        </span><span style="color: #800080;">$file_data</span> = <span style="color: #008080;">fread</span>(<span style="color: #800080;">$fp</span>,<span style="color: #800080;">$buffer</span><span style="color: #000000;">);
        </span><span style="color: #008000;">//</span><span style="color: #008000;">统计读了多少个字节</span>
        <span style="color: #800080;">$file_count</span>+<span style="color: #800080;">$buffer</span><span style="color: #000000;">;
        </span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$file_data</span><span style="color: #000000;">;   
        </span><span style="color: #008000;">//</span><span style="color: #008000;">把部分数据会送给浏览器</span>
<span style="color: #000000;">        }
    </span><span style="color: #008080;">fclose</span>(<span style="color: #800080;">$fp</span><span style="color: #000000;">);
    }
    down_file(</span><span style="color: #800080;">$filename</span><span style="color: #000000;">);
</span>?>

 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn