• 文件上传下载


    1.php.ini配置文件

    如果要在PHP中实现小文件的上传(2MB以下),那么无需对php.ini配置文件进行修改,使用默认参数即可。但如果想实现完美的上传功能,则一定要对配置文件有所了解。首先来看一下图。

     

    从图中可以看到,有3部分内容需要进行配置。首先来看第1部分。

    1.Resource Limits

    Resource Limits,直译过来就是资源限制,包含了3个参数。该区块不仅仅是针对上传下载的,而是对全部的文件进行设置。各个参数含义及参数值说明如表1所示。

    表1                   Resource Limits块的参数说明

    参    数

    说    明

    max_execution_time

    每个脚本页面完成执行操作的最大时间,单位是秒。如果设为−1,说明没有限制

    max_input_time

    每个脚本页面处理请求数据的最大时间,单位是秒,也可以设为−1

    memory_limit

    一个脚本页所能够消耗的最大内存

    2.post_max_size

    post_max_size参数指PHP通过表单POST所能接收的最大值,包括表单里的所有项。

    3.File Uploads

    File Uploads块是专为文件上传设置的。该区块中同样包含了3个参数。参数含义及参数值说明如表2所示。

    表2                    File Uploads块的参数说明

    参    数

    说    明

    file_uploads

    是否允许HTTP上传,默认为On,即为开启,无需修改

    upload_tmp_dir

    文件上传时的临时存储目录。如果没指定就会用系统默认的临时文件夹

    upload_max_filesize

    允许上传的文件的最大值

    2.文件上传表单

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <form action="test.php" method="post" enctype="multipart/form-data">
             单个文件上传<br/>
            <input type="file" name="filename"/>
            <input type="submit" value="enter"><br/>
             多个文件上传<br/>
            <input type="file" name="userfile[]"/>
            <input type="file" name="userfile[]"/>
            <input type="submit" value="上传"/>
            <!-- 给一个隐藏域限制上传文件的大小 -->
            <input type="hidden" name="max_file_size" value="1024000">
        </form>
    </body>
    </html>
    

    3.文件上传数据处理

    如果表单设计的没有问题,那么在处理页中,使用$_FILES预定义变量就可以得到上传文件的相关信息。反之,如果得不到,那么就有可能是配置文件或表单设置的问题了。稍后会介绍上传的常见错误及原因。下面先介绍预定义变量$_FILES。

    $_FILES变量存储的是上传文件的相关信息,这些信息对于上传功能有很大作用。该变量是一个二维数组,保存的信息如表3所示。

    表3                         $_FILES变量值

    元  素  名

    说    明

    $_FILES[filename]['name']

    存储了上传文件的文件名。例如:exam.txt、myDream.jpg等

    $_FILES[filename]['size']

    存储了文件大小。单位为字节

    $_FILES[filename]['tmp_name']

    文件上传时,首先在临时目录中被保存成一个临时文件。该变量为临时文件名

    $_FILES[filename]['type']

    上传文件的类型。注意是类型,不是后缀

    $_FILES[filename]['error']

    存储了上传文件的错误代码

    error字段将返回上传文件的错误码,一共有7种状态。状态代码及说明如表4所示。

    表4           $_FILES[filename]['eror']中的错误代码及说明

    错 误 代 码

    错 误 说 明

    0

    UPLOAD_ERR_OK。上传成功,无错误

    1

    UPLOAD_ERR_INI_SIZE。上传文件大小超出php.ini中的upload_max_filesize的参数值

    2

    UPLOAD_ERR_FORM_SIZE。上传文件大小超出表单中MAX_FILE_SIZE隐藏域的值

    3

    UPLOAD_ERR_PARTIAL。文件没有被全部上传

    4

    UPLOAD_ERR_NO_FILE。没有文件被上传

    6

    UPLOAD_ERR_NO_TMP_DIR。找不到临时文件目录

    7

    UPLOAD_ERR_CANT_WRITE。文件写入失败

    <?php 
    header("Content-type: text/html; charset=utf-8");
    // 文件上传
    $tmparr=$_FILES['filename'];//获取上传文件信息
    if($tmparr['name']!=''){
        foreach($tmparr as $name=>$value){//循环输出数组索引和值
            echo $name.'=>'.$value.'<br>';
        }
    }else{
        echo "<script>alert('请添加上传文件')</script>";
    }
    //上传文件函数
    if($tmparr['error']==0){//上传成功
        if(is_uploaded_file($tmparr['tmp_name'])){//判断是不是post上传文件
            if(true==move_uploaded_file($tmparr['tmp_name'], $tmparr['name'])){
                echo "上传成功";
            }else{
                echo "<script>alert('文件不合法');history_go(-1);</script>";
            }
        }else{
            echo "<script>alert('非法操作');history_go(-1);</script>";
        }
    }else{//上传失败
        echo "<script>alert('上传错误,错误类型:".$tmparr['error']."');history_go(-1);</script>";    
    }
    

    打印$_FILES

     4.文件下载

    1.通过链接下载

    通过链接下载,就是将文件的相对路径或绝对路径直接作为超链接即可。如果是压缩文件,那么直接单击超链接就可以下载;对于文本文件,单击鼠标右键,选择“目标另存为”命令,就可以将文本文件下载下来。所有格式的文件,都可以通过这种方法下载下来。下面是一个实例,代码如下:

    要下载聊天室模块源码,请点击<ahref= "../14.rar">这里</a>

    2.通过header()函数下载

    header()函数属于HTTP函数,它的作用是发送一个原始的HTTP标头。header()函数的语法格式如下:

    void header ( string string [, bool replace [, int http_response_code]] ) 
    

    参数说明如下:

    string:发送的标头。

    replace:如果一次发送多个标头,指明相似的标头是替换还是添加。如果是False,则强制发送多个同类型标头。默认是True,即替换。

    http_response_code:强制HTTP响应为指定值。

    HTTP标头有很多,这里只介绍下载,其他请参考相关资料。下载HTTP标头的代码如下:

    header('Content-Disposition: attachment; filename="filename"');

    上面的代码中惟一需要改动的就是filename。将filename替换为要下载的文件就可以了。

    在下面的实例中,如果用户单击“同意”按钮,将会调用down()函数并跳转到test.php页中,如果用户单击“不同意”按钮,页面将关闭。代码如下:

     <div style="padding: 15px; 300px;height: 50px;border: 1px #000000 solid;">
            协议条款<br/>
            ...<br/>
            ... ...<br/>
            <button onclick="down('./ff6.png')">同意</button> <button onclick="closeme()">不同意</button>
        </div>
        <div style="padding: 5px;">如果你想下载该文件,请详细阅读上面的服务条框。你同意后可以下载</div>
        <script>
            function down(name){
                location='test.php?act=true&name='+name;
            }
            function closeme(){
                window.opener=null;
                window.close();
            }
        </script>
    

     处理页代码

    <?php
         if($_GET['act']  == true){
             header('Content-type: application/octet-stream');        //设置HTTP标头
             header('Content-Disposition: attachment; filename="'.$_GET['name'].'"');
          readfile('../'.$_GET['name']);                                          //读取文件
         }
    ?>
    
  • 相关阅读:
    Python基础练习
    理解信息管理系统
    datatime处理日期和时间
    中文词频统计
    文件方式实现完整的英文词频统计实例
    组合数据类型练习,英文词频统计实例上
    英文词频统计预备,组合数据类型练习
    凯撒密码、GDP格式化输出、99乘法表
    字符串基本操作
    条件、循环、函数定义 练习
  • 原文地址:https://www.cnblogs.com/aten/p/8743593.html
Copyright © 2020-2023  润新知