zoukankan      html  css  js  c++  java
  • PHP---文件上传与下载

    转自http://www.cnblogs.com/lazycat-cz/p/4113037.html

    安全性能---水平不够 ╮(╯_╰)╭

    文件上传--->就是将本地的文件上传到服务器上。(HTTP协议有待学习)首先要在本地选择上传的文件,上传到服务器后,服务端又要做一些处理,为此客户端和服务端均要做一些设置

    (客户端)文件上传最基本的方法是通过form表单进行POST传递文件,先贴代码。

    <html>
    <body>
    
    <form action="upload_file.php" method="post"  enctype="multipart/form-data">
    <label for="file">选择文件:</label>
    <input type="file" name="uploadFile" id="file" /> <br />
    <input type="submit" name="submit" value="上传" /> </form> </body> </html>

    <form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。

    <input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

    (服务端) 文件上传到了服务器上还要经过一些处理过程。在php中,$_POST保存的是post传递的数据,而上传文件的相关信息保存在$_FILES里边,

    <?php
        echo '_FILES: <pre>';
    //<pre> 标签的一个常见应用就是用来表示计算机的源代码。
        print_r($_FILES);
          
        echo '_POST: <pre>';
        print_r($_POST);
    ?>

    _FILES[]是二维数组。array[uploadFile]键名取决于<input>type="file"标签中的的name值。它标记的是这个控件的上传文件信息,因此我们可以放多个上传控件,设置不同的name,当然设置一样的name也可以,完全可以把它们全放在一个数组里边,如<input type="file" name="upload[]">。error表示错误,有这么几种情况,0:没有错误,上传成功; 1:文件超过了PHP配置指令中的upload_max_filesize规定的大小; 2:文件超过HTML表单中MAX_FILE_SIZE规定的大小,3:文件只有部分上传; 4:没有文件上传。(size问题仍没有弄清楚╮(╯_╰)╭,就暂时先不做说明)

    <?php
        $typeWhiteList = array('txt', 'doc', 'php', 'zip', 'exe');   // 类型白名单,过滤不允许上传的文件类型
        $max_size = 1000000;  // 大小限制 为1M
        $upload_path = 'D:/WAMP';    // 指定移至的目录
         
        // 1、判断是否成功上传到服务器 
        $error = $_FILES['uploadFile']['error'];
        if($error > 0){
             switch($error){
                 case 1: exit('超过php配置的最大文件上传限制');
                 case 2: exit('超过HTML表单的最大文件上传限制');
                 case 3: exit('文件只有部分被上传');
                 case 4: exit('没有上传任何文件');
                 default: exit('未知类型错误');
             }
        }
         
        // 2、判断是否为允许上传的类型
        $extension = pathinfo($_FILES['uploadFile']['name'], PATHINFO_EXTENSION); // 获取扩展名
        if(!in_array($extension, $typeWhiteList)){
            if($extension == '')
               exit('不允许上传空类型文件');
             else 
               exit('不允许上传'.$extension.'类型文件');
        } 
         
        // 3、判断是否为允许大小
        if($_FILES['uploadFile']['size'] > $max_size){
            exit('超过了允许上传到的'.$max_size.'字节');
        }
         
        // 4、已到指定位置
        $filename = date('Ymd').rand(1000, 9999);   // 生成一个新文件名,防止覆盖
        if(is_uploaded_file($_FILES['uploadFile']['tmp_name'])){   // 判断是否通过HTTP POST上传
            if(!move_uploaded_file($_FILES['uploadFile']['tmp_name'], $upload_path.$filename.'.'.$extension)){
                exit('无法移动到指定位置');
             }
             else{
                echo '文件上传成功<br/>';
                echo '文件名: '.$upload_path.$filename.'.'.$extension.'<br>';
             }
        }
         else{
             exit('文件未通过合法途径上传');
         }

    上传完成..............

    文件下载--->单的文件下载只需要用一个HTML链接就够了,使用<a>标签,href属性指定资源位置,一点就可。但这种方式只能处理浏览器默认无法识别的MIME类型,(MIME具体附wiki百科http://zh.wikipedia.org/wiki/%E5%A4%9A%E7%94%A8%E9%80%94%E4%BA%92%E8%81%AF%E7%B6%B2%E9%83%B5%E4%BB%B6%E6%93%B4%E5%B1%95)

    <html>
        <head>
                 <title>donwload file</title>
                 <meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
        </head>
        <body>
                 <a href="resource/header.txt">header.txt</a><br/>
                 <a href="resource/php.zip">php.zip</a><br/>
                 <a href="resource/pic.ico">pic.ico</a>
               
        </body>
    </html>

          对于这些浏览器不认识的类型文件,点链接,它直接弹框让你下载,有的浏览器甚至直接就下了,那么对于文本txt、jpg等浏览器默认识别的类型的文件,一点击则会直接展现在页面上,比如上面header.txt、pic.ico。如何不展示在页面上而去下载它们呢,使用header函数。

          header函数会通过发送头信息告知,请把该文件当成一个附件,这样点击的时候,就也会下载了。(还不是非常理解,完全理解了再补充╮(╯_╰)╭)

         

    哦了~                                        第一篇博文→_→

    再次声明转载地址http://www.cnblogs.com/lazycat-cz/p/4113037.html

  • 相关阅读:
    lubuntu18.04如何创建APPImage软件的桌面快捷方式
    查找一个程序所在的路径
    lubuntu18.04如何用命令行打开一个应用(application)
    linux shell(ubuntu18.04.4 LTS) autostart to change the wallpaper
    bash常用的快捷键
    mkfs格式化分区(为分区写入文件系统)
    fdisk交互
    Linux fdisk命令创建逻辑分区
    Linux fdisk命令创建扩展分区过程
    fdisk创立主分区过程
  • 原文地址:https://www.cnblogs.com/withershins/p/4357001.html
Copyright © 2011-2022 走看看