一、文件上传
前台页面:
<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 "
二、文件下载:
单文件下载:
<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>?>