php实现文件上传功能

php.ini 与文件上传有关的配置:

post_max_size = 8M:表单允许的最大值
upload_max_filesize = 2M:允许上传的文件大小
upload_tmp_dir =F:\wamp\tmp:指定临时文件地址,如果不知道操作系统指定
file_uploads = On:是否允许文件上传
max_file_uploads = 20:允许同时上传20个文件

 

关于文件上传的注意事项:

1. 限制文件上传的大小(总不能多大都能上传)

2. 给上传的文件取一个唯一的文件名(防止重名覆盖)

3. 限制上传文件的类型(防止伪装后辍上传)

4. 最好分目录存储上传的文件(方便日后查找)

5. 方便日后使用上传功能,可以把上传功能封装到类中

 

html部分:

<!DOCTYPE html>
 <html>
 <head>
    <meta charset="utf-8">
    <title>文件上传</title>
 </head>
 <body>
    <form action="upload.php" method="post" enctype="multipart/form-data">  
        <input type="file" name="pic">
        <input type="submit" name="" value="提交">
    </form>
</body>
</html>

 

php部分:

<?php 
    
    //print_r($_FILES);

    //文件存储位置
    $destination = 'uploads/';

    //限制上传文件大小
    $maxsize = 500*1024; //500KB
    if ($_FILES['pic']['size'] > $maxsize) {
        echo '图片大小超出限制';
        exit;
    }

    //分目录存储上传的文件
    $sub_path = date('Ymd').'/';
    if (!is_dir($destination.$sub_path)) {
        mkdir($destination.$sub_path,0777,true);
    }
    $destination .= $sub_path;
    //文件取一个唯一名字
    $filename = uniqid('goods_',true);
    $ext = strrchr($_FILES['pic']['name'], '.');
    $new_filename = $filename.$ext;
    $destination .= $new_filename;

    //允许上传的类型
    $allow_type = array('image/jpeg','image/jpg','image/png','image/gif');
    $true_type = $_FILES['pic']['type'];
    if (!in_array($true_type, $allow_type)) {
        echo '不支持该文件类型';
        exit;
    }
    
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $type = $finfo->file($_FILES['pic']['tmp_name']);
    if (!in_array($type,$allow_type)) {
        echo '不支持该文件类型';
        exit;
    }
    //移动文件
    if (move_uploaded_file($_FILES['pic']['tmp_name'], $destination)) {
        echo '上传成功'.'<br>';
        echo '图片路径:' . $sub_path.$new_filename;
    }else{
        echo '上传失败';
    }

 ?>

 

posted @ 2021-04-23 13:12  华北业余选手  阅读(440)  评论(0)    收藏  举报