多数大学生出来选择的工作和专业无关
首页 > 专业知识

PHP通用文件上传类的具体解析

时间:2018-07-02 19:39:17 [来源]:郑州PHP培训学校

   PHP通用文件上传类的具体解析

  PHP通用文件上传类的实质就是用到PHP组文件上传,在具体的编写代码过程中,要特别注意的是name后面必须要加上[],方便我们调用层循环。
  我们下面为大家具体讲解PHP通用文件上传类的具体代码编写,希望初学者能够通过本文学到一些新的知识,增加自己的编程实践经验。由于做项目中经常遇到文件上传,因此封装了一个通用的文件上传类,作用支持组文件上传,并且不同的上传域可以上传不同的文件类型,不同的文件类型限制的文件大小也可能不相同。
  举例来说:用户可上传一种展品并可为该展品上传一张缩略图,那么缩略图文件限制类型可能为jpg,,gif,png等,而展品文件限制类型可能为mov,avi,mpeg等,而图片大小可能限制为100KB,音频视频大小可能限制为2MB。类代码如下:
  class Upload
  {
  public $InputName;    // 文件上传域控件名/**
  * 允许上传的文件类型
  * 形式为 array('image/jpeg', 'image/png', 'image/gif') 或包含此类数组的数组(与每个上传域控件对应)*/
  public $FileType;
  /**
  * 最大上传文件大小(单位:byte)
  * 形式为 array('image' => $size, 'audio' => $size)(表示每种应用文件类型所对应的上传大小) 或包含此类数组的数组(与每个上传域控件对应)或一数值(表示所有上传文件均限制在此大小之下)*/
  public $FileMaxSize;
  public $FileSavePath;  // 文件保存路径(可为数组形式,表示不同上传域上传文件到不同的路径)public $FileSaveName;  // 文件保存名(不包含后缀名)(可为数组形式,表示不同上传域上传文件保存的不同名称)public $NoteFileFalse; // 文件错误提示
  public $NoteFileType;  // 文件类型不符提示public $NoteFileSize;  // 文件大小超出提示/* 上传文件并返回文件名信息(包含后缀名) */public function UploadFile()
  {
  $this->CheckFile(); // 检验文件
  $file = $_FILES[$this->InputName];
  $file_save_full_name = array(); // 文件保存名(包含后缀名)foreach ($file['name'] as $key => $name)
  {
  if (!empty($name)) // 文件不为空
  {
  /* 确定文件保存路径 */
  if (is_array($this->FileSavePath))
  {
  $file_save_path = $this->FileSavePath[$key];}
  else
  {
  $file_save_path = $this->FileSavePath;
  }
  /* 确定文件保存名(不包含后缀名) */
  if (is_array($this->FileSaveName))
  {
  $file_save_name = $this->FileSaveName[$key];}
  else
  {
  $file_save_name = $this->FileSaveName;
  }
  /* 开始保存 */
  $this->CreatePath($file_save_path); // 如果路径不存在则创建路径move_uploaded_file($file["tmp_name"][$key], $file_save_path . $file_save_name . $this->GetSuffix($file['name'][$key]));$file_save_full_name[] = $file_save_name . $this->GetSuffix($file['name'][$key]);}
  else
  {
  $file_save_full_name[] = null;
  }
  }
  unlink($file);
  /* 如果只有一个文件,则返回单个文件名 */
  if (count($file_save_full_name) == 1)
  {
  $file_save_full_name = $file_save_full_name[0];}
  return $file_save_full_name;
  }
  PHP动态多文件上传的具体代码分享
  PHP动态多文件上传分为两步,第一步为文件上传的代码,第二步则是文件提交的代码。希望我们通过这次的学习能加深大家所掌握的知识。
  大家在通过对PHP语言的学习,应该大致都可以掌握文件上传的方法。不过,对于初学者来说,文件的动态上传还是比较头疼的。下面,我们就为大家介绍关于PHP动态多文件上传的巨提代码。
  上传文件代码:
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  <title>文档上传</title>
  </head>
  <body>
  <mce:script language="javascript"><!--
  动态添加文件选择控件-->
  function AddRow()
  {
  var eNewRow = tblData.insertRow();
  for (var i=0;i<1;i++)
  {
  var eNewCell = eNewRow.insertCell();
  eNewCell.innerHTML = "<tr><td><input type='file' name='filelist[]' size='50'/></td></tr>";}
  }
  // --></mce:script>
  <form name="myform" method="post" action="uploadfile.php" enctype="multipart/form-data" >
  <table id="tblData" width="400" border="0">
  <!-- 将上传文件必须用post的方法和enctype="multipart/form-data"  -->
  <!-- 将本页的网址传给uploadfile.php-->
  <input name="postadd" type="hidden" value="<?php echo "http://".$_SERVER['HTTP_HOST'].$_SERVER["PHP_SELF"]; ?>" />
  <tr><td>文件上传列表
  <input type="button" name="addfile"  onclick="AddRow()" value="添加列表" /></td></tr>
  <!-- filelist[]必须是一个数组-->
  <tr><td><input type="file" name="filelist[]" size="50" /></td></tr>
  </table>
  <input type="submit" name="submitfile" value="提交文件" />
  </form>
  </body>
  </html>
  PHP动态多文件上传之提交文件代码:
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  <title>文件上传结果</title>
  </head>
  <body>
  <?php
  if ($_POST["submitfile"]!="")
  {
  $Path="./".date('Ym')."/";
  if (!is_dir($Path))//创建路径
  {  mkdir($Path);  }
  echo "<div>";
  for ($i=0;$i<count($filelist);$i++)
  { //$_FILES["filelist"]["size"][$i]的排列顺序不可以变,因为fileist是一个二维数组
  if ($_FILES["filelist"]["size"][$i]!=0)
  {
  $File=$Path.date('Ymdhm')."_".$_FILES["filelist"]["name"][$i];if (move_uploaded_file($_FILES["filelist"]["tmp_name"][$i],$File)){ echo "文件上传成功 文件类型:".$_FILES["filelist"]
  ["type"][$i]." "."文件名:"
  .$_FILES["filelist"]["name"][$i]."<br>"; }
  else
  { echo "文件名:".$_FILES["filelist"]["name"][$i]."上传失败</br>"; }
  }
  }
  echo "</div><br><a href="$postadd" mce_href="$postadd">返回</a></div>";}
  ?>
  </body>
  </html>
  以上就是PHP动态多文件上传的所有代码。
  PHP批量上传图片的具体实现方式
  图片上传非常简单,但是如何才能进行批量的大容量的图片集体上传呢?本文内就为大家具体讲解了有关PHP批量上传图片的代码编程。
  大家可以通过下面这一段代码,来具体了解PHP批量上传图片的具体方式。我们在学习PHP的时候,肯定是要从实际操作中慢慢积累经验,以巩固我们所学到的知识,逐渐的加强我们的编程水平。
  PHP批量上传图片的代码如下:
  <html>
  <head><title>upload picture more once</title></head>
  <body>
  <form action="" method="post" enctype="multipart/form-data">
  <p>Pictures:<br />
  <input type="file" name="pictures[]" /><br />
  <input type="file" name="pictures[]" /><br />
  <input type="file" name="pictures[]" /><br />
  <input type="submit" name="upload" value="Send" />
  </p>
  </form>
  </body>
  </html>
  <?php
  if($_POST['upload']=='Send'){
  $dest_folder   =  "picture/";
  if(!file_exists($dest_folder)){
  mkdir($dest_folder);
  }
  foreach ($_FILES["pictures"]["error"] as $key => $error) {if ($error == UPLOAD_ERR_OK) {
  $tmp_name = $_FILES["pictures"]["tmp_name"][$key];$name    = $_FILES["pictures"]["name"][$key];$uploadfile = $dest_folder.$name;
  move_uploaded_file($tmp_name, $uploadfile);}
  }
  }
  ?>
  以上代码就是PHP批量上传图片的全部编程,希望对有需要的同学有所帮助。
 

上一篇:PHP保护数据库的具体代码示例

下一篇:快速掌握PHP数组循环取数据技巧