美文网首页Pentest
PHP之上传与下载

PHP之上传与下载

作者: cws | 来源:发表于2016-07-12 21:24 被阅读33次

    上传

    客户端设置

    • 客户端使用form表单上传文件,在form表单中必须指明enctype和method属性的值
    <html>
    <head>
        <title>post</title>
    </head>
    <body>
        <form action="xx.php" mothod="post" enctype="multipart/form-data">
            <input type="file" value="myfile" /><br />
            <input type="submit" value="提交" />
        </form>
    </body>
    </html>
    

    服务端设置

    • php.ini:
    file_uploads = On   //默认允许HTTP文件上传,此选项不能设置为OFF
    upload_tmp_dir=    //文件上传时存放文件的临时目录
    upload_max_filesize = 20M   //设定单个文件上传的大小,必须小于post_max_size
    post_max_size = 19M   //允许POST表单的数据最大大小
    
    • $_FILES:
    $_FILES['upload_file']['name']  //带扩展名的原始文件名
    $_FILES['upload_file']['size']  //文件大小
    $_FILES['upload_file']['tmp_name']  //临时文件名
    $_FILES['upload_file']['error']  //上传文件时的错误信息
    $_FILES['upload_file']['type']  //上传文件的类型
    
    //type是上传文件时原始信息里的content_type,即MIME,有image/gig、text/html等
    //error一般有5中类型:
    //0 上传成功
    //1 文件大小超过了upload_max_filesize
    //2 文件大小超过了表单总MAX_FILE_SIZE设定的值
    //3 只有部分被上传
    //4 没有上传任何文件
    
    • 服务端上传步骤
    1. 判断uploads这个文件夹存在
    2. 判断error的值
    3. 判断文件后缀是否合法
    4. 判断MIME的类型和子类型是否合法
    5. 判断文件大小
    6. 对文件进行重命名
    7. 移动
    

    下载

    对于php无法解析的类型

    <a href="http://www.aa.com/xx.rar">下载</a >
    

    对于php能解析的文件(同时为了安全性)

    <?php
        header("Content-type:text/html;charset=utf-8");
        $file_name = "文件.exe";
        $file_name=iconv("utf-8","gb2312",$file_name); //解决中文不能显示的问题 
        $file_dir = "/public/www/download/";
        $file_path = $file_dir.$file_name;
        if (!file_exists($file_path)) { //检查文件是否存在
            echo "文件找不到";
            exit;
        } else {
            $file = fopen($file_path,"r"); // 打开文件
            // 输入文件标签,下面4个Header是必须的
            Header("Content-type: application/octet-stream");
            Header("Accept-Ranges: bytes");
            Header("Accept-Length: ".filesize($file_path));
            Header("Content-Disposition: attachment; filename=" . $file_name);
            // 输出文件内容
            echo fread($file,filesize($file_path));
            fclose($file);
            exit;
        }
    ?> 
    

    相关文章

      网友评论

        本文标题:PHP之上传与下载

        本文链接:https://www.haomeiwen.com/subject/hsdsjttx.html