php轻松实现文件上传功能

5年以前  |  阅读数:378 次  |  编程语言:PHP 

本文分为五个部分针对php上传文件进行分析讲解,具体内容如下

  • 文件上传变量
  • 将服务器上的临时文件移动到指定目录下
  • php.ini上传相关配置
  • error错误号
  • 单文件上传实例

1.文件上传变量


    //$_FILES:文件上传变量
     #name 文件的名称
     #type 文件的类型
     #tmp_name 临时文件名
     #size 文件的大小
     #error 错误信息

    $filename = $_FILES["myFile"]["name"];
    $type = $_FILES["myFile"]["type"];
    $tmp_name = $_FILES["myFile"]["tmp_name"];
    $size = $_FILES["myFile"]["size"];
    $error = $_FILES["myFile"]["error"]; 

2.将服务器上的临时文件移动到指定目录下


    //1.move_uploaded_file($tmp_name,$destination):将服务器上的临时文件移动到指定目录下
     #上传后文件名字,移动成功返回true,否则返回false
    move_uploaded_file($tmp_name,"D:/".$filename);

    //2.copy($tmp_name,$destination)
    copy($tmp_name,"D:/".$filename); 

3.php.ini上传相关配置


    # file_uploads=On 支持HTTP上传
     # upload_tmp_dir="" 临时文件保存的目录
     # upload_max_filesize=2M 允许上传文件的最大值
     # max_file_uploads=20 允许一次上传的最大文件数
     # post_max_size=8M post方式发送数据的最大值

     # max_execution_time = 1 设置了脚本被解析器终止之前允许的最大执行时间,单位为秒,防止程序写的不好而占尽服务器资源
     # max_input_time = 60 脚本解析输入数据允许的最大时间,单位为秒
     # max_input_nesting_level = 64 设置输入变量的嵌套深度
     # max_input_vars = 1000 接受多少输入的变量
     # memory_limit = 128M 最大单线程的独立内存使用量

4.error错误号


     # 0,没有错误发生,文件上传成功。
     # 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
     # 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
     # 3,文件只有部分被上传。
     # 4,没有文件被上传。
     # 6,找不到临时文件夹。
     # 7,文件写入失败。
     # 8,上传的文件被PHP扩展程序中断

5.单文件上传实例
form.html


    <!doctype html>
    <html lang="en">
    <head>
     <meta charset="UTF-8">
     <title>Document</title>
    </head>
    <body>
    <form action="fileUpload.php" method="post" enctype="multipart/form-data">
     请选择你要上传的文件:
     <input type="file" name="myFile"><br>
     <input type="submit" value="上传文件">

     <!--限制客户端上传文件的最大值 隐藏域另起一行-->
     <!--<input type="hidden" name="MAX_FILE_SIZE" value="字节数">-->

     <!--accept设置上传文件的类型-->
     <!--<input type="file" name="myfile" accept="image/jpg,image/png,image/gif">-->
    </form>
    </body>
    </html>

fileUpload.php


    header("content-type:text/html;charset:utf-8");
    $fileInfo = $_FILES["myFile"];

    $filename = $fileInfo["name"];
    $type = $fileInfo["type"];
    $error = $fileInfo["error"];
    $size = $fileInfo["size"];
    $tmp_name = $fileInfo["tmp_name"];
    $maxSize=2*1024*1024;//允许的最大值
    $allowExt=array("jpeg","jpg","gif");
    $flag = true;//检测是否为真实的图片类型

    //判断错误号
    if($error == 0){
     //判断上传文件的大小
     if($size>$maxSize){
     exit("上传文件过大");
     }

     //检测文件类型
     //取出文件扩展名
     $ext = pathinfo($filename,PATHINFO_EXTENSION);
     if(!in_array($ext,$allowExt)){
     exit("非法文件类型");
     }

     //检测是否为真实的图片类型
     if($flag){
     if(@!getimagesize($tmp_name)){
      exit("不是正的图片类型");
     }
     }

     //创建目录
     $path = "D:/test/";
     if(!file_exists($path)){
     mkdir($path,0777,true);
     chmod($path,0777);
     }

     //确保文件名唯一,防止重名覆盖
     $uniName = md5(uniqid(microtime(true),true)).".".$ext;
     $destination = $path.$uniName;
     if(@move_uploaded_file($tmp_name,$destination)){
     echo "上传成功";
     }else{
     echo "上传失败";
     }
    }else{
     switch($error){
     case 1:
     case 2:
     case 3:
     case 4:
     case 6:
     case 7:
     case 8:
      echo "上传错误";
      break;
     }
    }

希望本文所述对大家学习php程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例