当前位置:首页 > PHP教程 > php上传下载 > 列表

PHP实现文件上传操作和封装

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-17 12:04:48 浏览: 评论:0 

本文实例为大家分享了PHP实现文件上传操作和封装的具体代码,供大家参考,具体内容如下。

PHP文件上传主要两个步骤:

1.首先前端html写好文件表单上传网页

2.在前端点提交时,web服务器php脚本通过超全局变量$_FILES和一个move_uploaded_file函数搞定

前端html如下:

  1. <!DOCTYPE HTML> 
  2. <html> 
  3. <head> 
  4.  <meta charset="utf-8"
  5.  <title>文件上传</title> 
  6. </head> 
  7. <body> 
  8.  <form action="upload.php" method="post" enctype="multipart/form-data"
  9.  <div style="margin: 0 auto; padding:50px 0px; width:300px;"
  10.  <input type="file" id="upload" name="uploadpic" style="display:none"/> 
  11.  <input type="text" id="filename" value="文件名"
  12.  <input type="button" id="picbtn" value="图片上传" /> 
  13.  <input type="submit" value="提交" />  
  14.    
  15.  </div> 
  16.  </form> 
  17.  <script type="text/javascript"
  18.  function $(id) 
  19.  { 
  20.  var objs = document.getElementById(id); 
  21.  return objs; 
  22.  } 
  23.  window.onload = function(){ 
  24.  $("picbtn").onclick = function(){ 
  25.  $("upload").click(); //点图片上传时,同时触发文件选择 
  26.  } 
  27.    
  28.  $("upload").onchange = function(){ 
  29.  $("filename").value = this.value; //获取文件选择值 
  30.  } 
  31.    
  32.  }  
  33.  </script> 
  34. </body> 
  35. </html> 

注:表单上传文件时,method必须用post,且须声明是enctype="multipart/form-data"

2.服务器php脚本upload.php代码如下:

  1. <?php 
  2. if(move_uploaded_file($_FILES['uploadpic']['tmp_name'], './fileupload/'.$_FILES['uploadpic']['name'])) 
  3.  echo "ok"
  4.    
  5. else 
  6.  echo "fail"

注:可以用print_r($_FILES)打印查看超全局变量里面放的内容,可以看到文件的相关信息都放在这个变量里面;如

  1. array ( 
  2.  'uploadpic' =>  
  3.  array ( 
  4.  'name' => '1客栈首页.jpg'
  5.  'type' => 'image/jpeg'
  6.  'tmp_name' => 'C:\\Windows\\Temp\\php3F1C.tmp'
  7.  'error' => 0, 
  8.  'size' => 1706919, 
  9.  ), 
  10. )ok 

从变量的数组里面可以知道上传的文件名,文件类型、web服务器临时存放图片的位置(如果要更改临时存放路径,可以去php.ini里面更改),错误信息和文件大小(限制文件上传大小,也可以到php.ini里修改)。

error有如下几种:

其值为 0,没有错误发生,文件上传成功。

其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。

其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。

其值为 3,文件只有部分被上传。

其值为 4,没有文件被上传。

其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。

其值为 7,文件写入失败。PHP 5.1.0 引进。

=====文件上传封装类======

  1. <?php 
  2. class UpFile{ 
  3.  public $maxsize=2; //1M 
  4.  public $errmsg=""
  5.  public $ext = "png,jpg,bmp,gif"
  6.    
  7.  //上传大小是否符合 
  8.  function isAllowSize($size
  9.  { 
  10.  if($size <= $this->maxsize*1024*1024) 
  11.  { 
  12.  return true; 
  13.  } 
  14.  else 
  15.  { 
  16.  return false; 
  17.  } 
  18.  } 
  19.    
  20.  //判断后缀名是否符合 
  21.  function isAllowExt($ext
  22.  { 
  23.  return in_array(strtolower($ext), explode(','$this->ext)); 
  24.  } 
  25.    
  26.  //获取文件后缀名 
  27.  function getFileExt($file
  28.  { 
  29.  $arr = explode('.'$file); 
  30.  return end($arr); 
  31.  } 
  32.    
  33.  //图片上传,$pickey为input的name值,$save_path保存路径 
  34.  function upload($pickey,$save_path
  35.  { 
  36.  if(!isset($_FILES[$pickey])) 
  37.  { 
  38.  return false; 
  39.  } 
  40.    
  41.  if($_FILES[$pickey]['error'] !=0) 
  42.  { 
  43.  $this->errmsg = $this->getErrorType($_FILES[$pickey]['error']); 
  44.  return false; 
  45.  } 
  46.  $file_ext = $this->getFileExt($_FILES[$pickey]['name']); 
  47.  echo $file_ext
  48.  if(!$this->isAllowExt($file_ext)) 
  49.  { 
  50.  $this->errmsg = "文件后缀名不符合"
  51.  return false; 
  52.  } 
  53.  echo $_FILES[$pickey]['size']; 
  54.  if(!$this->isAllowSize($_FILES[$pickey]['size'])) 
  55.  { 
  56.  $this->errmsg = "大小超过限制"
  57.  return false; 
  58.  } 
  59.    
  60.  $str = "abcdefjhijkmnpqrst23456789"
  61.  $filename = date("YmdHis",time()).substr(str_shuffle($str), 0,6); 
  62.  $dir = $this->makeDir($save_path); 
  63.  if(move_uploaded_file($_FILES[$pickey]['tmp_name'], $dir.'/'.$filename.'.'.$file_ext)) 
  64.  { 
  65.    
  66.  return true; 
  67.  } 
  68.  else 
  69.  { 
  70.  $this->errmsg = "上传失败"
  71.  return false; 
  72.  } 
  73.  } 
  74.    
  75.  //创建目录 
  76.  function makeDir($save_path
  77.  { 
  78.  $path = $save_path.'/'.date("Ymd",time()); 
  79.    
  80.  if(is_dir($path) || mkdir($path,0777,true)) //不存在该目录文件,创建 
  81.  { 
  82.  echo $path
  83.  return $path
  84.  } 
  85.  else 
  86.  { 
  87.  return false; 
  88.  } 
  89.  } 
  90.    
  91.  //错误类型分析 
  92.  function getErrorType($error
  93.  { 
  94.  $errmsg = ""
  95.  switch ($error
  96.  { 
  97.  case 0: 
  98.  $errmsg = "文件上传成功"
  99.  break
  100.  case 1: 
  101.  $errmsg = "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值"
  102.  break
  103.  case 2: 
  104.  $errmsg = "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值"
  105.  break
  106.  case 3: 
  107.  $errmsg = "文件只有部分被上传"
  108.  break
  109.  case 4: 
  110.  $errmsg = "没有文件被上传"
  111.  break
  112.  case 6: 
  113.  $errmsg = "找不到临时文件夹"
  114.  break
  115.  case 7: 
  116.  $errmsg = "文件写入失败"
  117.  break
  118.  } 
  119.  return $errmsg
  120.  } 

使用如下:

  1. <?php 
  2. include 'upfile.class.php'
  3.    
  4. $upfile = new UpFile(); 
  5. if($upfile->upload('uploadpic'"./fileupload")) 
  6.  echo "ok"
  7. else 
  8.  echo $upfile->errmsg; 
  9. }

Tags: PHP文件上传 PHP上传封装

分享到: