PHP文件上传及下载源码
Posted 一坪海岸线y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP文件上传及下载源码相关的知识,希望对你有一定的参考价值。
一、文件上传
前台页面:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>文件上传</title> </head> <body> <div> <form method="post" action="upload.php" enctype="multipart/form-data" > 用户名<input type="text" name="username"></input> <br> 文件简单介绍<br><textarea name="fileintro" rows="8" cols="50"></textarea> <br>选择要上传的文件<br><input type="file" name="myfile"></input><br> <input type="submit" value="上传文件"></input> </form> </div> </body> </html>
后台处理:
<?php //接收提交页面传送的相关信息 $name = $_POST[\'username\']; $intro = $_POST[\'fileintro\']; //$_FILES中存放着文件的相关信息 // echo "<pre>"; // print_r($_FILES); // echo "</pre>"; //可以在这里对文件大小进行限制 /*$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\']."失败"; } ?>
二、文件下载:
单文件下载:
<?php function down_file($file_name,$file_path){ //$file_name = iconv("uft-8","gb2312",$file_name); //如果文件名是中文,需要对中文名称转码gb2312 //要下载的文件读取到服务器的内存中 //服务器返回文件数据给浏览器 //浏览器将文件写入用户指定的位置 //1.判断文件是否存在 if(!file_exists($file_name)){ echo "111"; return ; } $fp = fopen($file_name,"r"); $file_size = filesize($file_name); //获取文件大小 //可通过file_size限制浏览器下载文件大小。 //返回的文件 header("Content-type:application/octet-stream"); //按字节大小返回 header("Accept-Ranges:bytes"); //返回文件大小 header("Accept-Length:$file_size"); //客户端弹出对话框,对应的文件名 header("Content-Disposition:attachment;filename=".$file_name); $buffer = 1024; //定义缓冲区 //为了下载的安全,最好使用文件字节读取计数器 $file_count = 0; //feof用于判断文件是否读取到文档尾 while(!feof($fp) && ($file_size-$file_count>0)){ $file_data = fread($fp,$buffer); //统计读了多少个字节 $file_count+$buffer; echo $file_data; //把部分数据会送给浏览器 } fclose($fp); //关闭文件 } ?>
多个文件下载:
DownList.php:
<a href="downprocess.php?filename=1.jpg">down</a><img src="1.jpg" width="50px" height="50px"><br><br> <a href="downprocess.php?filename=2.jpg">down</a><img src="2.jpg" width="50px" height="50px"><br><br> <a href="downprocess.php?filename=3.jpg">down</a><img src="3.jpg" width="50px" height="50px"><br><br> <a href="downprocess.php?filename=4.jpg">down</a><img src="4.jpg" width="50px" height="50px"><br><br>
downprocess.php:
<?php $filename = $_REQUEST[\'filename\']; function down_file($file_name){ if(!file_exists($file_name)){ echo "111"; return ; } $fp = fopen($file_name,"r"); $file_size = filesize($file_name); header("Content-type:application/octet-stream"); //按字节大小返回 header("Accept-Ranges:bytes"); //返回文件大小 header("Accept-Length:$file_size"); //客户端弹出对话框,对应的文件名 header("Content-Disposition:attachment;filename=".$file_name); $buffer = 1024; //定义缓冲区 $file_count = 0; //feof用于判断文件是否读取到文档尾 while(!feof($fp) && ($file_size-$file_count>0)){ $file_data = fread($fp,$buffer); //统计读了多少个字节 $file_count+$buffer; echo $file_data; //把部分数据会送给浏览器 } fclose($fp); } down_file($filename); ?>
以上是关于PHP文件上传及下载源码的主要内容,如果未能解决你的问题,请参考以下文章