zoukankan      html  css  js  c++  java
  • PHP学习之路之PHP文件上传需要考虑的问题以及解决方法($_FILES,$_SERVER,substr,strrpos,file_exists,move_uploaded_file,is_uploaded_file,mkdir)

    问题:

    如何控制用户上传的文件类型
    如何控制用户上传的文件大小
    如何防止用户覆盖图片问题
    如何防止同一个用户上传的文件名相冲突问题
    解答:

    ①可以通过PHP全局数组$_FILES['myfile']['type']来判断上传的文件类型

    ②可以通过PHP全局数组$_FILES['myfile']['size']来判断上传的文件大小

    ③可以根据用户输入的用户名来动态创建文件夹

    ③通过time(),rand(),生成的数字来给文件命名就可以解决文件名冲突问题

    PHP Codes:

     1 <?php
    2 echo "<pre>";
    3 print_r($_FILES);
    4 echo "<pre>";
    5 $file_size=$_FILES['myfile']['size'];//获取文件的大小
    6 echo "当前文件大小:".$file_size."B=".(int)$file_size/(1024)."KB<br>";
    7 $file_type=$_FILES['myfile']['type'];
    8 //如何控制用户上传的文件类型
    9 if($file_type=='image/jpeg' || $file_type=='image/pjpeg' ){//只允许上传jpg格式的图片
    10 //如何控制用户上传的文件大小
    11 if($file_size>2*1024*1024){
    12 echo "文件大小限制在2M以内...";
    13 // echo "<meta content=\"3,http://www.baidu.com\" http-equiv=\"refresh\" />";//页面跳转
    14 exit();
    15 }
    16 if (is_uploaded_file($_FILES['myfile']['tmp_name'])){//通过if语句判断文件是否上传成功
    17 $move_from=$_FILES['myfile']['tmp_name'];
    18 //如何防止用户覆盖图片问题===>可以根据用户输入的用户名来创建文件夹
    19 $user_path=$_SERVER['DOCUMENT_ROOT']."/upload/".$_POST['name'];//将上传的文件移到你所希望的目录下
    20 if (!file_exists($user_path)) {//如果此文件夹不存在,则创建之,接下来的就应该把图片移到这个文件夹中来
    21 mkdir($user_path);
    22 }
    23
    //如何防止同一个用户上传的文件名相冲突问题
    24 $suffix=substr($_FILES['myfile']['name'],strrpos($_FILES['myfile']['name'],'.'));//取得文件文件后缀
    25 $move_to=$user_path."/".time().rand().$suffix;//通过time(),rand(),就可以解决文件名冲突问题
    26 if(move_uploaded_file($move_from,iconv("UTF-8","GBK",$move_to))){
    27 echo "文件上传成功!";
    28 echo "路径为:".$move_to;
    29 // echo "<meta content=\"3,http://www.baidu.com\" http-equiv=\"refresh\" />";
    30 }
    31 }else{
    32 echo "文件上传失败...";
    33 // echo "<meta content=\"3,http://www.baidu.com\" http-equiv=\"refresh\" />";//页面跳转
    34 die();
    35 }
    36 }
    37 else{
    38 echo "<script>alert('只支持图片上传,并且只支持jpg格式的图片');</script>";
    39 // echo "<meta content=\"3,http://www.baidu.com\" http-equiv=\"refresh\" />";//页面跳转
    40 die();
    41 }
    42 ?>

    form表单:

    <form action="upload.php" method="POST" enctype="multipart/form-data">
    用户名:<input name="name" type="text">
    文件描述:<textarea name="file_info"></textarea>
    <input type="file" name="myfile"/>
    <input type="submit" value="上传"/>
    </form>

    结果截图:

    上传之前的文件名:1.jpg

    上传之前的文件名:13222172242955.jpg

    相关文章文件上传相关函数

     

     



  • 相关阅读:
    Mysql模糊查询like效率,以及更高效的写法(转)
    补全数组缺失某种类型的数据方法
    php 判断两个数组是否相等
    query如何全选或不全选时,不操作已经禁用的checkbox
    css talbe中td溢出隐藏 div溢出隐藏
    MongoDb的安装
    PSR规范
    shell中各种括号的作用()、(())、[]、[[]]、{}
    mysql explain执行计划详解
    PHP "延迟静态绑定" 功能,static
  • 原文地址:https://www.cnblogs.com/hongfei/p/uploadfiles.html
Copyright © 2011-2022 走看看