首页 > 语言 > PHP > 正文

php轻松实现文件上传功能

2024-09-04 11:46:59
字体:
来源:转载
供稿:网友

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

文件上传变量

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

php.ini上传相关配置

error错误号

单文件上传实例

1.文件上传变量

  1. //$_FILES:文件上传变量 
  2.  
  3.  #name 文件的名称 
  4.  
  5.  #type 文件的类型 
  6.  
  7.  #tmp_name 临时文件名 
  8.  
  9.  #size 文件的大小 
  10.  
  11.  #error 错误信息 
  12. //Vevb.com 
  13.  
  14. $filename = $_FILES["myFile"]["name"]; 
  15.  
  16. $type = $_FILES["myFile"]["type"]; 
  17.  
  18. $tmp_name = $_FILES["myFile"]["tmp_name"]; 
  19.  
  20. $size = $_FILES["myFile"]["size"]; 
  21.  
  22. $error = $_FILES["myFile"]["error"];  

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

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

3.php.ini上传相关配置

  1. # file_uploads=On 支持HTTP上传 
  2.  
  3.  # upload_tmp_dir="" 临时文件保存的目录 
  4.  
  5.  # upload_max_filesize=2M 允许上传文件的最大值 
  6.  
  7.  # max_file_uploads=20 允许一次上传的最大文件数 
  8.  
  9.  # post_max_size=8M post方式发送数据的最大值 
  10.  
  11.  # max_execution_time = 1 设置了脚本被解析器终止之前允许的最大执行时间,单位为秒,防止程序写的不好而占尽服务器资源 
  12.  
  13.  # max_input_time = 60 脚本解析输入数据允许的最大时间,单位为秒 
  14.  
  15.  # max_input_nesting_level = 64 设置输入变量的嵌套深度 
  16.  
  17.  # max_input_vars = 1000 接受多少输入的变量 
  18.  
  19.  # memory_limit = 128M 最大单线程的独立内存使用量 

4.error错误号

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

5.单文件上传实例

form.html

  1. <meta charset="UTF-8"> 
  2.  
  3.  <title>Document</title> 
  4.  
  5. <form action="fileUpload.php" method="post" enctype="multipart/form-data"> 
  6.  
  7.  请选择你要上传的文件: 
  8.  
  9.  <input type="file" name="myFile"><br> 
  10.  
  11.  <input type="submit" value="上传文件"> 
  12.  
  13.  <!--限制客户端上传文件的最大值 隐藏域另起一行--> 
  14.  
  15.  <!--<input type="hidden" name="MAX_FILE_SIZE" value="字节数">--> 
  16.  
  17.  <!--accept设置上传文件的类型--> 
  18.  
  19.  <!--<input type="file" name="myfile" accept="image/jpg,image/png,image/gif">--> 
  20.  
  21. </form> 

fileUpload.php

  1. header("content-type:text/html;charset:utf-8"); 
  2.  
  3. $fileInfo = $_FILES["myFile"]; 
  4.  
  5. $filename = $fileInfo["name"]; 
  6.  
  7. $type = $fileInfo["type"]; 
  8.  
  9. $error = $fileInfo["error"]; 
  10.  
  11. $size = $fileInfo["size"]; 
  12.  
  13. $tmp_name = $fileInfo["tmp_name"]; 
  14.  
  15. $maxSize=2*1024*1024;//允许的最大值 
  16.  
  17. $allowExt=array("jpeg","jpg","gif"); 
  18.  
  19. $flag = true;//检测是否为真实的图片类型 
  20.  
  21.  
  22.  
  23. //判断错误号 
  24.  
  25. if($error == 0){ 
  26.  
  27.  //判断上传文件的大小 
  28.  
  29.  if($size>$maxSize){ 
  30.  
  31.  exit("上传文件过大"); 
  32.  
  33.  } 
  34.  
  35.    
  36.  
  37.  //检测文件类型 
  38.  
  39.  //取出文件扩展名 
  40.  
  41.  $ext = pathinfo($filename,PATHINFO_EXTENSION); 
  42.  
  43.  if(!in_array($ext,$allowExt)){ 
  44.  
  45.  exit("非法文件类型"); 
  46.  
  47.  } 
  48.  
  49.  
  50.  
  51.  //检测是否为真实的图片类型 
  52.  
  53.  if($flag){ 
  54.  
  55.  if(@!getimagesize($tmp_name)){ 
  56.  
  57.   exit("不是正的图片类型"); 
  58.  
  59.  } 
  60.  
  61.  } 
  62.  
  63.  
  64.  
  65.  //创建目录 
  66.  
  67.  $path = "D:/test/"
  68.  
  69.  if(!file_exists($path)){ 
  70.  
  71.  mkdir($path,0777,true); 
  72.  
  73.  chmod($path,0777); 
  74.  
  75.  } 
  76.  
  77.  
  78.  
  79.  //确保文件名唯一,防止重名覆盖 
  80.  
  81.  $uniName = md5(uniqid(microtime(true),true)).".".$ext
  82.  
  83.  $destination = $path.$uniName
  84.  
  85.  if(@move_uploaded_file($tmp_name,$destination)){ 
  86.  
  87.  echo "上传成功"
  88.  
  89.  }else
  90.  
  91.  echo "上传失败"
  92.  
  93.  } 
  94.  
  95. }else
  96.  
  97.  switch($error){ 
  98.  
  99.  case 1: 
  100.  
  101.  case 2: 
  102.  
  103.  case 3: 
  104.  
  105.  case 4: 
  106.  
  107.  case 6: 
  108.  
  109.  case 7: 
  110.  
  111.  case 8: 
  112.  
  113.   echo "上传错误"
  114.  
  115.   break
  116.  
  117.  } 
  118.  
希望本文所述对大家学习php程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表