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

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

     

     



  • 相关阅读:
    POJ 3041 Asteroids 最小点覆盖 == 二分图的最大匹配
    POJ 3083 Children of the Candy Corn bfs和dfs
    POJ 2049 Finding Nemo bfs 建图很难。。
    POJ 2513 Colored Sticks 字典树、并查集、欧拉通路
    POJ 1013 Counterfeit Dollar 集合上的位运算
    POJ 2965 The Pilots Brothers' refrigerator 位运算枚举
    无聊拿socket写的100以内的加法考试。。。
    POJ 1753 Flip Game
    初学socket,c语言写的简单局域网聊天
    汇编语言 复习 第十一章 标志寄存器
  • 原文地址:https://www.cnblogs.com/hongfei/p/uploadfiles.html
Copyright © 2011-2022 走看看