--------------------------------------------------------
php基础实例--图片上传与下载
--------------------------------------------------------
实现目标:通过图片上传来了解php中文件上传的流程
1、创建图片上传的存放目录
2、创建index.php文件,浏览上传后的图片,并提供上传表单
注意:上传表单中的发送方式必须为post,类型enctype="multipart/form-data"
3、doupload.php 执行图片上传
接收文件上传使用的是$_FILES[]全局数组接收
每个上传的文件都有5个上传的信息组成数组
array(1) {
["pic"]=> //上传文件的变量名字
array(5) {
["name"]=>//上传文件名
string(36) "23627248_1374493649038_1024x1024.jpg"
["type"]=>//文件类型
string(10) "image/jpeg"
["tmp_name"]=>//上传文件成功后临时文件名
string(24) "E:\xampp\tmp\php5113.tmp"
["error"]=>//和该文件上传相关的错误代码
int(0)
["size"]=>//上传文件大小
int(30516)
}
}
var_dump — 打印变量的相关信息
s_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
pathinfo — 返回文件路径的信息
getimagesize — 取得图像大小
4、download.php下载文件
代码片段:
<html> <head> <title>图片上传与下载示例</title> </head> <body> <h2>图片上传与下载示例</h2> 上传图片: <!-- 文件上传表单方法必须为post --> <form action="doupload.php" method="post"enctype="multipart/form-data"> <input type="file" name="pic"/> <input type="submit" value="上传"/> </form> <table width="500" border="0" > <tr align="left"bgcolor ="#cccccc"> <th>序号</th><th>图片</th><th>添加时间</th><th>操作</th> </tr> <?php //1打开目录uploads $dir = opendir("./uploads"); //2遍历目录输出里面的图片信息 $i = 0; while ($f = readdir($dir)) { if ($f != "."&&$f!="..") { $i++; echo "<tr>"; echo "<td>{$i}</td>"; echo "<td><img src='./uploads/{$f}'width='80' height='50'/></td>"; echo "<td>".date("Y-m-n",filectime("./uploads/".$f))."</td>"; echo "<td><a href='./uploads/{$f}'>查看</a>|| <a href='download.php?name={$f}'>下载</a></td>"; echo "</tr>"; } } //3.关闭目录 closedir($dir); //4. ?> <tr bgcolor ="#cccccc"> <td cospla></td> </tr> </table> </body> </html>
<?php //执行文件(图片)上传 echo "<pre>"; var_dump($_FILES); echo "</pre>"; //1、获取上传文件信息 $upfile = $_FILES["pic"]; $typelist = array("image/jpeg","image/jpg","image/png","image/gif"); //定义上传图片的类型 //定义上传后文件路径 $path = "./uploads/"; //2、过滤上传文件的错误号 if($upfile["error"]>0) { //获取错误信息 switch($upfile["error"]) { case 1: $info = "其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。"; break; case 2: $info = "其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 "; break; case 3: $info = "其值为 3,文件只有部分被上传。"; break; case 4: $info = "其值为 4,没有文件被上传。"; break; case 6: $info = "其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。"; break; case 7: $info = "其值为 7,文件写入失败。"; break; } dir("上传文件错误 ,原因:".$info) ; } //3本次上传文件大小的过滤 if($upfile["size"]>10000000000) { die("上传文件大小超出限制"); } //4类型的过滤 if(!in_array($upfile["type"],$typelist)) { die("上传文件类型非法!".$upfile["type"]); } //5、上传后的文件名的定义 ,随机获取文件名(保持后缀名不变) $fileinfo = pathinfo($upfile["namE"]); //解析上传文件名字 do{ $newfile = date("YmnHis").rand(1000,9999).$fileinfo["extension"]; }while(file_exits($path.$newfile)); //6、执行文件上传 if(is_uploaded_file($upfile["tmp_name"])) { // 执行文件上传(移动上传文件) if( move_uploaded_file($upfile["tmp_name"],$path.$newfile)) { echo "文件上传成功!"; echo "<h2><a href='index.php'>浏览</a></h2>"; }else { echo"上传文件失败!!!"; } }else { echo "不是要上传的文件类型"; } //7、 ?>
<?php
//执行图片下载
//1.获取要下载的图片名(加上路径)
$file ="./uploads/".$_GET["name"];
// 2.重设相应类型
$info = getimagesize($file);
header("Content-Type:".$info["mime"]);
// 指定下载的文件名;
header("Content-Disposition:attachment:filename".$_GET["name"]);
// 指定文件的大小
header("Content-Length:".filesize($file));
//响应内容
readfile($file);
?>