现在的位置: 首页 > 综合 > 正文

php基础实例–图片上传与下载

2018年05月03日 ⁄ 综合 ⁄ 共 3002字 ⁄ 字号 评论关闭

--------------------------------------------------------
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);
   ?>

抱歉!评论已关闭.