代码学习PHP文件的上传和下载

Posted 水清云影

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码学习PHP文件的上传和下载相关的知识,希望对你有一定的参考价值。

=====================

     文件上传和下载

=====================

一、php.ini的配置信息

  file_uploads = On /Off    是否允许文件上传
    upload_max_filesize=2M 上传的文件的最大大小
    post_max_size = 8M       POST数据所允许的最大大小
    upload_tmp_dir             上传文件放置的临时目录

二、客户端上传设置

    1、 表单必须是POST提交
    2、 上传的类型:enctype="multipart/form-data"
    3、上传使用的表单项
        <input type="file" name=".." >
    4、(可选)上传大小限制的表单隐藏域:MAX_FILE_SIZE,
        <input type="hidden" name="MAX_FILE_SIZE" value="大小字节"/>
        注意:此字段必须在文件输入字段之前(常放在form标签后面)

<html>
<head><title>文件上传</title></head>
<body>
    <form action=\'upload.php\' method=\'POST\' enctype=\'multipart/form-data\'>
        <input type=\'hidden\' name=\'MAX_FILE_SIZE\' value=\'1000000\'>
        选择文件:<input type=\'file\' name=\'myfile\'>
        <input type=\'submit\' value=\'上传文件\'>
    </form>
</body>
</html>

三、在服务器端通过PHP处理上传

    1、 使用$_FILES全局数组来接收上传信息
        在每个上传的文件里,$_FILES中都会有5个属性:
            error:上传的错误号:0--4
                0:表示没有发生任何错误。
                1:上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
                2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。
                3:表示文件只被部分上传。
                4:表示没有上传任何文件。
                6:找不到临时文件夹
                7:文件写入失败
            name:上传的文件名
            size:文件的大小
            type:文件类型
            tmp_name: 临时文件


    2、判断是否为上传文件    is_uploaded_file()

 1 <?php
 2 //判断文件是否可以上传到服务器
 3 //$_FILE[\'myfile\'][\'error\']为0表示上传成功
 4 if($_FILES[\'myfile\'][\'error\'] > 0){
 5     echo \'上传错误\';
 6     switch ($_FILES[\'myfile\'][\'error\']){
 7         case 1: die(\'上传文件大小超过PHP配置文件中的约定值:upload_max_filesize\');
 8         case 2: die(\'上传大小超出了表单中的约定值:MAX_FILE_SIZE\');
 9         case 3: die(\'文件只被部分上传\');
10         case 4: die(\'没有上传任何文件\');
11         default:die(\'未知错误\');
12     }
13 }
14 ?>


    3、将上传的文件移动到新位置    move_uploaded_file()

1 <?php
2 $path = \'./uploads\'
3 if(is_uploaded_file($_FILES[\'myfile\'][\'tmp_name\'])){
4     if(!move_uploaded_file($_FILES[\'myfile\'][\'tmp_name\'],$path . \'/\' . $filename)){
5         die(\'不能将文件移动到指定目录\');
6     }
7 }
8 ?>

 

  4、判断是否为可以上传的类型

 1 <?php
 2 //设置允许的上传类型
 3 $allowtype = array(\'gif\',\'jpg\',\'png\');
 4 //拆分数组,并删除后缀名
 5 $cs = array_pop(explode(\'.\',$FILES[\'myfile\'][\'name\']));
 6 //通过判断文件的扩展名来决定是否是允许上传的类型
 7 if(!in_array($cs,$allowtype)){
 8     die("这个后缀名是{$cs},不是允许上传的文件类型");
 9 }
10 ?>

 5、判断允许上传文件大小

1 <?php
2 $size = 100000;
3 if($FILES[\'myfile\'][\'size\'] > $size){
4     die(\'超过了允许{$size}字节大小\'):
5 }
6 ?>

 6、上传后系统定义文件名

1 <?php
2 //为了系统安全,也为了同名文件不会被覆盖,上传后将文件名使用系统定义
3 $cs = array_pop(explode(\'.\',$FILES[\'myfile\'][\'name\']));
4 $filename = date(\'YmdHis\').rand(100,999) . \'.\' . $cs;
5 }
6 ?>

四、多个文件上传

只要在客户端多提供几个类型为file的输入表单,并设置不同的name属性值

 1 <html>
 2 <head><title>文件上传</title></head>
 3 <body>
 4     <form action=\'upload.php\' method=\'POST\' enctype=\'multipart/form-data\'>
 5         <input type=\'hidden\' name=\'MAX_FILE_SIZE\' value=\'1000000\'>
 6         选择文件1:<input type=\'file\' name=\'myfile[]\'><br>
 7         选择文件2:<input type=\'file\' name=\'myfile[]\'><br>
 8         选择文件3:<input type=\'file\' name=\'myfile[]\'><br>
 9         <input type=\'submit\' value=\'上传文件\'>
10     </form>
11 </body>
12 </html>

五、文件下载

1 <?php
2 header("Content-Type:类型");                              //指定下载的文件类型
3 header("Content-Disposition:attachment;filename=文件名"); //指定下载的文件描述
4 header("Content-Length:文件大小");                        //指定下载的文件大小
5 readfile("./uploads/".$picname);                         //读取并输出图片内容
6 ?>

六、思维导图

 

以上是关于代码学习PHP文件的上传和下载的主要内容,如果未能解决你的问题,请参考以下文章

PHP文件上传设置文件类型代码?

PHP代码审计学习——文件上传

PHP必用代码片段

大文件上传下载实现思路,分片断点续传代码实现,以及webUpload组件

Struts2学习—文件上传和下载

java Ftp上传创建多层文件的代码片段