PHP多文件上传/下载模块

算法老李
• 阅读 3404

上传部分

<?php
/**
 * PHP多文件上传模块
 *
 * 用到的函数:is_upload_file(), move_upload_file(), pathinfo(), file_exists()
 */


//1.获取要上传文件的信息
$up_info = @$_FILES['myfile'];
$to_path = "./pic";
$typelist = array("image/gif","image/jpeg", "image/pjpeg", "image/png");

//在循环里面验证上传相关信息
for ($i = 0; $i < count($up_info['name']); $i++) {
    
    //2.判断文件是否上传错误
    if ($up_info['error'][$i]>0){
        switch ($up_info['error'][$i]){
            case 1:
                $err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
                break;
            case 2:
                $err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
                break;
            case 3:
                $err_info="文件只有部分被上传";
                break;
            case 4:
                $err_info="没有文件被上传";
                break;
            case 6:
                $err_info="找不到临时文件夹";
                break;
            case 7:
                $err_info="文件写入失败";
                break;
            default:
                $err_info="未知的上传错误";
                break;
        }
        continue($err_info);
    }
    
    //3.判断文件上传的类型是否合法
    if (!in_array($up_info['type'][$i], $typelist)){
        continue("文件类型错误!".$up_info['type'][$i]);
    }
    
    //4.上传文件的大小过滤
    if ($up_info['size'][$i]>1000000){
        continue("文件大小超过1000000");
    }


    //5.上传文件名处理
    $exten_name = pathinfo($up_info['name'][$i], PATHINFO_EXTENSION);
    do{
        $main_name=date("YmdHis")."--".rand(100, 999);
        $new_name = $main_name.".".$exten_name;
    }while (file_exists($to_path.'/'.$new_name));
    
    
    
    //6.判断是否是上传的文件,并执行上传
    if (is_uploaded_file($up_info['tmp_name'][$i])){
        if (move_uploaded_file($up_info['tmp_name'][$i], $to_path.'/'.$new_name)){
            echo "文件上传成功!";
        }else{
            echo "文件移动失败!";
        }
    }

}
?>

下载部分

<?php

$filename = "20140723102400248.jpg";

header('Content-Type:image/jpeg');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Length:'.filesize($filename));

readfile($filename);

?>
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
4年前
uploadify,swfupload等flash上传session丢失问题,无法接收到表单
大部分网站的上传文件功能都要求用户登陆,而判断用户登陆状态一般是用session标记。现在流行flash上传插件,优点是显示每个文件上传的进度条,可中途取消,暂停等等。然而用flash上传插件有个问题,那就是上传的时候flash会丢失session,服务端会以为是游客而拒绝处理。解决办法是有的,下面慢慢道来:我们知道,php里启用sessio
Stella981 Stella981
4年前
Linux文件上传下载sz 和 rz 命令
windows系统和linux系统之间文件上传和下载用到rz和sz命令。rz:上传文件sz:下载文件1.先检查是否安装rz,sz模块!在这里插入图片描述(https://oscimg.oschina.net/oscnet/395e1364538ccb9baf814c5bab6da6f8de8.png)
Stella981 Stella981
4年前
Apache禁止解析PHP、禁止指定user_agent、php配置文件
Apache禁止解析PHP某个目录禁止解析PHP,是很有用的。特别是能够上传文件的目录。做网站安全的时候,这用的很多,比如某个目录可以上传文件,为了防止上传的文件有木马,所以我们禁止这个目录下面的访问解析PHP禁止解析PHP修改虚拟主机配置文件vim/usr/local/apache2/conf/ext
Stella981 Stella981
4年前
PHP操作mysql数据库
PHP向MySQL发送数据、PHP操作MySQL数据库是重点中的重点。为大家举一些例子:1.要注册一个用户,是将表单的数据POST发送给PHP写入数据库2.购买一个商品,是将商品信息和用户信息通过PHP写入到数据库3.在线付费,是将用户的充值信息通过PHP写入数据库4.修改头像上传的头像地址得到后,通过PHP修改数据库里头像字段
Stella981 Stella981
4年前
LAMP架构之php禁止解析、user_agent限定及php配置文件常规设置
本文索引:禁止某目录PHP解析限制user\_agentPHP相关配置查看PHP配置文件的位置安全函数设定设置时区错误信息日志安全相关的参数禁止某目录PHP解析某些目录可以上传图片等文件,如果不设置禁止PHP
Wesley13 Wesley13
4年前
PHP 文件上传的原理及案例分析
原理将客户端文件上传至服务器端,在服务器端临时存储,再将服务器端临时存储的文件移至指定位置实现文件上传需要的知识点:前端页面1.form表单必须是用post发送方式,因为get会将参数带到url中,而上传的文件转换后字符会很长,而且也是为了安全性2.form表单需要使用enctype
Wesley13 Wesley13
4年前
thinkphp集成系列之阿里云oss
web2.0时代;除了纯信息展示类的网站;基本都是有文件上传功能的;最不济你得让用户换个头像吧;但是随着业务的发展;如果上传的文件都和网站程序源代码放在一起;那是有相当多的弊端的;1:静态文件会占用大量带宽;2:服务器的成本略高;常规的做法是把php源代码放到一台服务器上;图片等静态文件放在另一台服务器上;当一个神奇的“云”时代的到来
Wesley13 Wesley13
4年前
PHP实现图片(文件)上传
这几天整理做过的php项目,感觉这个经常会用到,传上来共享一下咯首先,前端界面1、表单的首行需要加上enctype"multipart/formdata",需要上传的图片必须设置type"file"表示选择文件<formid"img_form"method"post"class"formhorizontal"r
Wesley13 Wesley13
4年前
JS 异步分段上传文件
为了解决大文件上传(PHP上传最大限制2GB)同时为了解决文件上传是对服务器造成的压力可以通过分段上传解决这个问题,这得益于HTML5开发的fileAPI前台代码:引用了进度条插件myProgress.js<linkhref"__PUBLIC__/admin/css/myProgress.css"rel"stylesh
Easter79 Easter79
4年前
springMVC两种方式实现多文件上传及效率比较
springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传。这两种方式对于实现多文件上传效率上却有着很大的差距,下面我们通过实例来看一下这两种方式的实现方式,同时比较一下在效率上到底存在着多大的差距。1.下载相关jar包。需要引入的jar出了springMVC的ja
Wesley13 Wesley13
4年前
PHP代码审计笔记
0x01最简单的文件上传未进行文件类型和格式做合法性校验,任意文件上传漏洞代码示例:新建一个提供上传文件的 upload.html<html创建上传脚本  upload\_file.php<?php漏洞利用:可上传任意文件!(https://oscimg.oschina.net/oscnet/a