zoukankan      html  css  js  c++  java
  • php......文件上传

    有时候我们需要上传文件到服务器,比较常见的就是注册或修改个人信息时需要上传头像。上传文件需要form表单,并且设置属性enctype="multipart/form-data",只有这样文件才能上传。

    上传文件页面:

    <form action="chuli.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="上传" />
    </form>

    表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;
    只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作。

    根据name属性值接收传过来的文件,但不是用POST方法,而是FILES。

    输出一下:var_dump($_FILES["file"]);

    array (size=5)
      'name' => string  '4.png' (length=5)  //文件名
      'type' => string  'image/png' (length=9) //文件类型
      'tmp_name' => string  'D:wamp	mpphp89A0.tmp' (length=23) //文件临时存储路径,若不保存文件,当页面关闭时会被删除
      'error' => int  0  //错误信息,0代表false
      'size' => int  4866 //文件字节大小,若想显示kb,可除以

    上传处理页面:

    <?php
    //var_dump($_FILES["file"]);
    //判断文件上传是否会出错
    if(!$_FILES["file"]["error"])
    {
        //限制上传文件的类型和大小   //不能让用户随意上传文件
        if(($_FILES["file"]["type"]=="image/png" || $_FILES["file"]["type"]=="image/jpeg") && $_FILES["file"]["size"]<=1048576)  // size是字节 小于1M
        {
            //造文件存储路径:两种方法
            //1.在文件名前加日期时间
            $filename = "./img/".date("YmdHisms",time()).$_FILES["file"]["name"];
            //2.造文件夹,不用改文件名
            //$filename = "./img/kaifa/zhangsan/20160523/aa.jpg";
            //处理文件名编码格式,一定要在判断文件名是否重复之前   //文件名如有中文会有乱码
            $filename = iconv("UTF-8","GB2312",$filename);        
            
            //判断文件名是否重复
            if(file_exists($filename))    
            {
                echo "该文件已经存在!";    
            }
            else
            {
                //若在此处处理编码格式是不行的,因为此时判断文件名是否重复的文件名与上传的文件名时不同的,这样重复上传会虽然上传成功,但是会替换已经存在的文件
                //上传文件,移动文件  //将临时文件移动到已经造好的文件存储路径下
                move_uploaded_file($_FILES["file"]["tmp_name"],$filename);    
            }
        }
        else
        {
            echo "上传的文件类型不支持!";    
        }
    }
    else
    {
        echo "文件上传失败!";    
    }

    注意:

    1.先判断上传是否出错,然后限制文件类型和大小,造文件存储路径,判断文件是否重复,最后保存上传文件。

    2.造文件存储路径时,一般可以加日期时间,可精确到毫秒,若想再精确,可加流水号,每次上传都会加1,或者随机数也可以,这样上传的文件名会改变;

    若不想改文件名,就需要造文件夹的方法,比如$filename = "./img/kaifa/zhangsan/20160523/aa.jpg";

    3.php上传文件大小有限制,若文件太大,服务器很快就满了,所以要限制大小

    4.网页上不能显示客户端的图片,只能显示服务器端的图片,所以预览图片时,图片一定已经存储在服务器上了

    5.用户选择完文件时,就已经上传到服务器上了,但是只是在临时存储路径,点击上传按钮是将路径保存到数据库。

  • 相关阅读:
    git如何忽略特殊文件
    一文了解H5照片上传过程
    Vue组件通信方式(8种)
    H5 拍照图片旋转、压缩和上传
    Chrome插件推荐
    高效开发之使用Cmder替换cmd
    使用git配置ssh的文章推荐
    360极速浏览器如何默认设置必应搜索引擎
    notepad 多文档切换
    centos下kill、killall、pkill命令区别
  • 原文地址:https://www.cnblogs.com/xinghun/p/5537949.html
Copyright © 2011-2022 走看看