php中实现图片的上传
1、新建一个index.php用来编辑一个页面,实现图片的上传和下载的点击和视图功能
源代码:
<html>
<head>
<title>图片的上传和下载</title>
<style type="text/css">
td{
text-align:center;
}
table{
margin:0 auto;
}
a{
text-decoration:none;
}
a:hover{
position:relative;
left:1px;
top:1px;
}
</style>
</head>
<body>
<form action="doupload.php" method="post" enctype="multipart/form-data">
<table align="center">
<caption><h1>图片的上传和下载</h1></caption><!--将caption标签放在form表格之下这样标题可以随着表单移动-->
<tr>
<th>上传文件</th>
<td><input type="file" name="pic"/></td>
<td><input type="submit" value="上传"/></td>
</tr>
</table>
</form>
<table width="500" border="1" >
<tr>
<th>序号</th><th>图片</th><th>添加时间</th><th>操作</th>
</tr>
<?php
$file=opendir("./uploads/");
$i=0;
while($f=readdir($file)){
if($f!=='.'&&$f!='..'){
$i++;
echo "<tr>";
echo "<td>{$i}</td>";
echo "<td><img src='./uploads/{$f}' width='100',height='80'></td>";//通过文件路径加上文件名的形式定位文件的位置
echo "<td>".date("Y-m-d-h-i-s",filectime("./uploads/".$f))."</td>";//定义日期的格式和当前的时间
echo "<td><a href='./uploads/{$f}'>查看</a>,<a href='download.php?name={$f}'>下载</a></td>";
echo "</tr>";
}
}
?>
</table>
</body>
</html>
2、新建一个doupload.php实现图片上传的接收和分析。
<?php
//1.获取上传的文件信息
$upfile = $_FILES["pic"];//用来接收一个一维数组,里面存放图片的信息:
$typelist=array("image/jpg","image/jpeg","image/png","image/gif");
$path="./uploads/";
//2.过滤上传文件的错误号
if($upfile["error"]>0){
//获取错误信息
switch($upfile["error"]){
case '1':
$info="上传的文件超过了php.ini中upload_max_filesize的值";
break;
case '2':
$info="上传的文件超过了html表单中MAX_FILE_SIZE选项指定的值";
break;
case '3':
$info="文件只有部分上传";
break;
case '4':
$info="文件没有被上传";
break;
case '5':
$info="找不到临时文件夹";
break;
case '6':
$info="文件写入失败";
break;
}
die("文件上传错误,原因是:{$info}");
}
// 3.本次文件上传大小的设置(自己选择)
if($upfile["size"]>1000000000){
die("文件大小超出限制");
}
// 4.类型过滤
if(!in_array($upfile["type"],$typelist)){
die("上传文件类型非法");
}
// 5.上传后文件名称的自定义
$fileinfo=pathinfo($upfil e["name"]);//返回一个关联数组包含有 path 的信息。包括以下的数组单元:dirname,basename 和 extension
do{
$newfile=date("YmdHis").rand(1000,9999).".".$fileinfo["extension"];//为新文件定义名称格式为当前时间加上从1000~9999的随机数。
}while(file_exists($path.$newfile));//如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE
//6.执行文件上传
//判断一个文件是否是通过HTTP POST上传的
if(is_uploaded_file($upfile["tmp_name"])){//判断在临时文件夹中中的文件是不是通过post放法上传的
//执行文件上传
if(move_uploaded_file($upfile["tmp_name"],$path.$newfile)){//首先检测人上传的文件名是否合法,合法的话,将文件移动到,后面的文件中
echo "文件上传成功";
echo "<h1><a href='index.php'>浏览</a></h1>";
}else{
die("文件上传失败");
}
}
else{
die("不是一个上传文件");
}
?>
//执行图片下载
$file = "./uploads/".$_GET["name"];
//2.重设响应类型
$info = getimagesize($file);//以数组的形式返回文件的大小,尺寸,类型和可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。
header("Content-Type:".$info["mime"]);//提示用户保存一个生成的$info["mime"]类型的文件
//3. 执行下载的文件名:
header("Content-Disposition:attachment;filename=".$_GET["name"]);//Content-Disposition 报头用于提供一个推荐的文件名,并强制浏览器显示保存对话框
header("Content-Length:".filesize($file));
//5. 响应内容
readfile($file);