PHP之路 WEB【第一篇】文件上传和下载
一、 php.ini的配置信息
file_uploads = On /Off 是否允许文件上传 upload_max_filesize=2M 上传的文件的最大大小 upload_tmp_dir 上传文件放置的临时目录 max_file_uploads = 20 允许上文件的数量 post_max_size = 8M POST数据所允许的最大大小
注意配置:upload_max_filesize的大小一定要小于post_max_size的配置大小。
二、客户端表单上传
1、 表单必须是post提交 2、 上传的类型:enctype="multipart/form-data" 3、上传使用的表单项 <input type="file" name=".." /> 4.(可选)上传大小限制的表单隐藏域:MAX_FILE_SIZE, <input type="hidden" name="MAX_FILE_SIZE" value="大小字节"/> 注意:此字段必须在文件输入字段之前(常放在form标签后面)
三、服务器端接收
1. 使用$_FILES全局数组来接收上传信息
在每个上传的文件里,$_FILES中都会有5个属性:
error:上传的错误号:0--4 0:表示没有发生任何错误。 1:上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。 3:表示文件只被部分上传。 4:表示没有上传任何文件。 6:找不到临时文件夹 7:文件写入失败 name:上传的文件名 size:文件的大小 type:文件类型 tmp_name: 临时文件
2:is_uploaded_file() //是否是上传文件
3:move_uploaded_file() //执行移动上传文件
四、 下载设置
header("Content-Type:类型"); //指定响应类型 header("Content-Disposition:attachment;filename=文件名"); //**执行下载文件名 header("Content-Length:文件大小"); readfile("./uploads/".$picname); //读取并输出图片内容;
<?php //文件下载练习 $filename="./uploads/1.jpg"; header("Content-Disposition:attachment;filename=".$filename); //指定下载文件的描述信息 readfile($filename);//将内容输出,以便下载。 ?>
五、上传demo
源码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>文件上传实例</title> </head> <body> <h3>1. 简单的上传处理:1.php</h3> <form action="1.php" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="myfile"/> <input type="submit" value="上传"/> </form> <br/><br/> <h3>2. 完整的上传处理:2.php</h3> <form action="2.php" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="myfile"/> <input type="submit" value="上传"/> </form> <br/><br/> <h3>3. 使用函数实现上传处理:3.php</h3> <form action="3.php" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="myfile"/> <input type="submit" value="上传"/> </form> <br/><br/> <h3>4. 使用函数实现多上传处理:4.php</h3> <form action="4.php" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="myfile1"/><br/><br/> 文件:<input type="file" name="myfile2"/><br/><br/> 文件:<input type="file" name="myfile3"/><br/><br/> <input type="submit" value="上传"/> </form> <br/><br/> <h3>5. 使用函数实现多上传处理:5.php</h3> <form action="5.php" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="myfile[]"/><br/><br/> 文件:<input type="file" name="myfile[]"/><br/><br/> 文件:<input type="file" name="myfile[]"/><br/><br/> <input type="submit" value="上传"/> </form> <br/><br/> <h3>6. HTML5多上传处理:5.php</h3> <form action="5.php" method="post" enctype="multipart/form-data"> 文件:<input type="file" multiple name="myfile[]"/><br/><br/> <input type="submit" value="上传"/> </form> <br/><br/> </body> </html>
<?php //简单的文件上传处理 echo "<pre>"; print_r($_FILES); //sleep(3); //复制上传的文件 //copy($_FILES['myfile']['tmp_name'],"./uploads/".$_FILES['myfile']['name']); move_uploaded_file($_FILES['myfile']['tmp_name'],"./uploads/".$_FILES['myfile']['name']);
<?php //完整的文件上传处理 //1.初始化变量信息 $upfile = $_FILES['myfile']; //被上传的文件信息 $path = "./uploads/"; //上传文件存储目录 $typelist = array("image/jpeg","image/png","image/gif","image/pjpeg"); //允许的上传文件类型 $maxsize =0; //允许上传文件大小 (默认0表示不限制) //2.判断上传错误号 if($upfile['error']>0){ switch($upfile['error']){ case 1: $info = "上传文件超出php.ini配置大小"; break; case 2: $info = "上传大小超过表单MAX_FILE_SIZE"; break; case 3: $info = "文件只有部分被上传"; break; case 4: $info = "没有文件被上传"; break; case 6: $info = "找不到临时文件夹"; break; case 7: $info = "文件写入失败"; break; default: $info="未知错误!"; break; } die("上传失败!原因:".$info); } //3.过滤上传文件类型 if(count($typelist)>0){ if(!in_array($upfile['type'],$typelist)){ die("上传失败!原因:文件类型错误!"); } } //4. 过滤上传文件大小 if($maxsize>0 && $upfile['size']>$maxsize){ die("上传失败!原因:文件大小超出限制!"); } //5.随机上传文件名 $ext =pathinfo($upfile['name'],PATHINFO_EXTENSION); //获取上传文件的扩展名 do{ //随机新的上传文件名 $filename = date("YmdHis").rand(1000,9999).".".$ext; }while(file_exists($path.$filename)); //判断是否存在 //6.移动上传文件 //先判断是否是上传文件 if(is_uploaded_file($upfile['tmp_name'])){ //移动上传文件 if(move_uploaded_file($upfile['tmp_name'],$path.$filename)){ echo "上传文件成功!文件名:".$filename; }else{ die("上传文件移动失败!"); } }else{ die("不是一个有效的上传文件!"); }
<?php header("Content-Type:text/html;charset=utf-8"); // 使用函数实现文件上传 //1. 导入函数库文件 require("functions.php"); //2. 初始化变量 $typelist = array("image/jpeg","image/png","image/gif","image/pjpeg"); $path = "./uploads/"; //3. 执行上传 $res = fileUpload($_FILES['myfile'],$path,$typelist); //4. 判断输出结果 if($res['error']){ echo "上传文件成功!文件名:".$res['info']; }else{ echo "上传文件失败!原因:".$res['info']; }
<?php header("Content-Type:text/html;charset=utf-8"); //使用函数实现多文件上传处理 echo "<pre>"; print_r($_FILES); echo "<hr/>"; //1. 导入函数库文件 require("functions.php"); //2. 初始化变量 $typelist = array("image/jpeg","image/png","image/gif","image/pjpeg"); $path = "./uploads/"; foreach($_FILES as $v){ //3. 执行上传 $res = fileUpload($v,$path,$typelist); //4. 判断输出结果 if($res['error']){ echo "上传文件成功!文件名:".$res['info']."<br/>"; }else{ echo "上传文件失败!原因:".$res['info']."<br/>"; } }
<?php header("Content-Type:text/html;charset=utf-8"); //使用函数实现多文件上传处理 echo "<pre>"; print_r($_FILES); //进行数据格式转换 $list = array(); foreach($_FILES['myfile']['name'] as $k=>$v){ $list[$k]['name'] = $v; $list[$k]['type'] = $_FILES['myfile']['type'][$k]; $list[$k]['tmp_name'] = $_FILES['myfile']['tmp_name'][$k]; $list[$k]['error'] = $_FILES['myfile']['error'][$k]; $list[$k]['size'] = $_FILES['myfile']['size'][$k]; } print_r($list); echo "<hr/>"; //1. 导入函数库文件 require("functions.php"); //2. 初始化变量 $typelist = array("image/jpeg","image/png","image/gif","image/pjpeg"); $path = "./uploads/"; foreach($list as $v){ //3. 执行上传 $res = fileUpload($v,$path,$typelist); //4. 判断输出结果 if($res['error']){ echo "上传文件成功!文件名:".$res['info']."<br/>"; }else{ echo "上传文件失败!原因:".$res['info']."<br/>"; } }
前端页面
简单的上传处理
使用函数实现多上传处理
谢谢