超简单 文件上传,下载

主要用到函数

opendir — 打开目录句柄
readdir — 从目录句柄中读取条目
closedir — 关闭目录句柄
filectime — 取得文件的 inode 修改时间
in_array — 检查数组中是否存在某个值
pathinfo — 返回文件路径的信息
file_exists — 检查文件或目录是否存在
is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
move_uploaded_file — 将上传的文件移动到新位置
getimagesize — 取得图像信息,大小
readfile — 输出一个文件

//2.重设响应类型
header('Content-type:'.$fileInfo['mime']);
//3.执行下载的文件名
header('Content-Disposition:attachment; filename='.$_GET['name']);
//4.指定文件大小
header('Content-Length:'.  filesize($file));

文件介绍

index.php主要遍历文件列表信息, 上传单表

doupload.php 主要处理文件上传

download.php 主要处理文件下载

index.php

<html>
    <head>
        <title>图片上传和下载示例</title>
    </head>
    <body>
        <h2>图片上传和下载示例</h2>
        <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="#ccc">
                <th>序号</th>
                <th>图片</th>
                <th>创建时间</th>
                <th>操作</th>
            </tr>
            <?php
            //打开目录 
            $dir = opendir("./uploads");
            //遍历目录
            $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-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>';
                }
            }
            //关闭目录
            closedir($dir);
            ?>
            <tr align="left" bgcolor="#ccc">
                <td colspan="4"> </td>
            </tr>
        </table>
    </body>
</html>

doupload.php

<?php
	//1 获取文件信息
	$upfile = $_FILES['pic'];
	$typeList = array('image/jpg', 'image/jpeg', 'image/gif', 'image/png');
    $path = './uploads/';
    $maxFileSize = 1024000;
	
	//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 6 :
                $info = '找不到临时文件夹';
                break;
            case 7 :
                $info = '文件写入失败。';
                break;
        }
    }
	//3上传文件大小过滤
    if ($upfile['size'] > $maxFileSize){
        die('上传文件超出限制');
    }
	
	//4文件类型过滤
	if (!in_array($upfile['type'], $typeList)){
        die('上传文件类型不允许'.$upfile['type']);
    }
    
	//5上传后的文件名定义
	$pathinfo = pathinfo($upfile['name']);
    do{
        $newFile = date('YmdHis').  rand(1000, 9999).'.'.$pathinfo['extension'];
    } while (file_exists($path.$newFile));
	//6执行上传文件
    if (is_uploaded_file($upfile['tmp_name'])){     //判断文件是否是通过 HTTP POST 上传的
        if (move_uploaded_file($upfile['tmp_name'], $path.$newFile)){
            echo '上传文件成功';
            echo '<h3><a href="index.php">返回</a></h3>';
        } else {
            die('上传文件失败');
        }
    } else {
        die('这不是一个上传文件');
    }
	
?>

download.php

<?php
//执行文件下载

//1.获取要下载的图片名
$file = './uploads/'.$_GET['name'];
//2.重设响应类型
$fileInfo = getimagesize($file);
header('Content-type:'.$fileInfo['mime']);
//3.执行下载的文件名
header('Content-Disposition:attachment; filename='.$_GET['name']);
//4.指定文件大小
header('Content-Length:'.  filesize($file));
//5.响应内容
readfile($file);
?>
前望
原文地址:https://www.cnblogs.com/ybbqg/p/2496749.html