$_FILES文件上传

版权声明:希望不要抄袭,可以借鉴。 https://blog.csdn.net/weixin_37616043/article/details/81085089

                                               $_FILES文件上传(html+php代码)

     在B/S程序中文件上传已经成为一个常用功能。其目的是客户可以通过浏览器(Browser)将文件上传到服务器(Server)上的指定目录。  PHP中文件上传的基础知识: 客户端form表单 服务器端对上传文件的操作

一、客户端文件上传的form表单:
<html>  
    <head>
            <title>文件上传</title>
    </head>  
    <body>   
             <form action="up.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>

二、

1、POST方法: 表单最常用的功能,向目标页面传递变量,我们在上传文件的时候,会在表单中设置相应的属性,来完成文件的传递
 2、enctype="multipart/form-data" 这样服务器就会知道,我们要传递一个文件,这样服务器可以知道上载的文件带有常规的表单信息。
3、MAX_FILE_SIZE 此字段必须在文件输入字段之前,控制最大的传递文件的大小(字节)

4、<input type="file" name="userfile"> 设置浏览器文件输入浏览按钮
5、file_uploads    ON    是否开启文件上传
6、upload_max_filesize    64M    限制PHP处理上传文件大小的最大值,PHP5.3版本默认是2M

7、post_max_size    3M    限制通过POST方法可以接受信息的最大值,也就是整个POST请求的提交值。PHP5.3版本默认是8M 设置的值>upload_max_filesize
8、upload_tmp_dir    d:/wamp/tmp    上传文件存放的临时路径,可以是绝对路径。值NULL则使用系统的临时目录。

9、超级全局数组$_FILES  :
        1、$_FILES["myfile"]["name"]中的值是: 客户端文件系统的文件的名称  
        2、$_FILES["myfile"]["type"]中的值是: 客户端传递的文件的类型  
        3、$_FILES["myfile"]["size"]中的值是: 文件的字节的大小  
        4、$_FILES["myfile"]["tmp_name"]中的值是: 文件被上传后在服务器存储的临时全路径  
        5、$_FILES["myfile"]["error"]中的值是: 文件上传的错误代码-php 4.2以后增加的功能


10、伴随文件上传时产生的错误信息代码是在PHP4.2.0版本中引入的,具体如下:
        1、值为0:表示没有发生任何错误。
      2、值为1:表示上传文件的大小超出了约定值。文件大小的最大值是在PHP配置文件中指定的,该指令是:   upload_max_filesize。
       3、值为2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。
       4、值为3:表示文件只被部分上传。
       5、值为4:表示没有上传任何文件。
       6、值为6:表示找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
       7、 值为7:表示文件写入失败。PHP 5.1.0 引进。


11、文件类型    MIME类型
      1、 图片文件    image/gif,image/jpg,image/jpeg,image/png,image/x-png
      2、纯文本和HTML    text/txt,text/plain,text/html
      3、二进制文件    application/octet-stream
      4、音频格式    audio/basic
      5、视频格式    video/mpeg

12、获取$_FILES超全局变量判断是否有值; 判断错误:$_FILES[‘myfile’][‘error’];
13、判断上传文件扩展名是否符合要求:$_FILES[‘myfile’][‘name’]中获取

14、判断上传文件大小是否符合要求:$_FILES[‘myfile’][‘size’]单位字节;
15、设置保存服务器上的新文件名包含扩展名:date(‘YmdHis’); 新文件保存位置目录是否存在,不存在需要新建目录:mkdir; 

16、复制或移动临时文件到指定位置保存:move_uploaded_file ;

PHP数据处理代码实现:

(第一种)function file_upload(){
    $date = date("Y-m-d");//当前凌晨时间
    $dir = DOC_ROOT . "/Public/Uploads/".$date;//保存的路径
    if (!file_exists($dir)) {//创建文件夹
        mkdir($dir, 0777, true);
    }
    if ($_FILES["file"]["error"]) {
        return $_FILES["file"]["error"];
    }else{
            //图片上传
            if (($_FILES["file"]["type"] == "image/png" || $_FILES["file"]["type"] == "image/jpeg" || $_FILES["file"]["type"] == "image/gif" || $_FILES["file"]["type"] == "image/jpg") && $_FILES["file"]["size"] < 5000000) {
                $images = $_FILES['file']['name'];
                $savePath = "/Public/Uploads/" .$date ."/";
                $saveName = $images;//savename
                //存入文件夹中
                $res = move_uploaded_file($_FILES["file"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'] . "/secondbear" . $savePath . $saveName);
                if ($res === false) {
                    return (array('code' => 300, 'msg' => '文件添加失败'));
                }else{
                        //图片保存成功
                        $where['savepath'] = $date . "/";
                        $where['savename'] = $saveName;
                        $where['time'] = time();
                        $where['type'] = $_FILES["file"]["type"];
                        $fileList_id = M('file')->add($where);
                    return $fileList_id;
                }
            } else {
                return (array('code' => 400, 'msg' => '文件过大或文件格式不正确'));
            }
    }
}

(第二种)

public function upload()
{
    $upload = new \Think\Upload();// 实例化上传类
    $upload->maxSize = 3145728;// 设置附件上传大小
    $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
    $upload->rootPath = './Public/Uploads/'; // 设置附件上传根目录
    $upload->savePath = ''; // 设置附件上传(子)目录
    // 上传文件
    $info = $upload->upload();
    if (!$info) {// 上传错误提示错误信息
        return $upload->getError();
    } else {// 上传成功
        return $info;
    }
}

第二种:引用TP3.2类,但是有一个问题就是在传PNG透明背景时,上传的图片会变黑,空白会填满,这主要是TP3.2中的gd类少了对PNG的判断因此解决如下:

12345是每一步 花圈的是新增的

猜你喜欢

转载自blog.csdn.net/weixin_37616043/article/details/81085089