并且不同的上传域可以上传不同的文件类型,   命名必是这样有"
分类:热门新闻

是因为做项目中平常遭逢文件上传,因而封装了三个通用的文书上传类,效能援救组文件上传,何况区别的上传域能够上传不一样的文件类型,分裂的文件类型限定的文件大小也只怕分化。譬释尊讲:客户可上传一种展品并可为该展品上传一张缩略图,那么缩略图像和文字件节制类型也许为jpg,gif,png等,而展品文件限定类型恐怕为mov,avi,mpeg等,而图片大小大概限定为100KB,音频录制大小大概约束为2MB。类代码如下:/*文件上传类*/classUpload{public$InputName;//文件上传域控件名/***允许上传的文件类型*款式为array(''image/jpeg'',''image/png'',''image/gif''State of Qatar或带有此类数组的数组*/public$FileType;/***最大上传文件大小*格局为array(''image''=$size,''audio''=$size卡塔尔或带有此类数组的数组或一数值*/public$FileMaxSize;public$FileSavePath;//文件保存路线public$FileSaveName;//文件保留名public$NoteFileFalse;//文件漏洞超级多提醒public$NoteFileType;//文件类型不符提示public$NoteFileSize;//文件大小超出提示/*上传文件并回到文件名音讯*/publicfunctionUploadFile(卡塔尔国{$this-CheckFile(卡塔尔国;//查验文件$file=$_FILES[$this-InputName];$file_number=count($file[''name'']卡塔尔;//要上传的公文数$file_save_full_name=array(State of Qatar;//文件保留名for($i=0;$i$file_number;$i++){$name=$file[''name''][$i];if(!empty($nameState of Qatar卡塔尔国//文件不为空{/*明确文件保留路线*/if(is_array($this-FileSavePath)){$file_save_path=$this-FileSavePath[$i];}else{$file_save_path=$this-FileSavePath;}/*规定文件保存名*/if(is_array($this-FileSaveName)){$file_save_name=$this-FileSaveName[$i];}else{$file_save_name=$this-FileSaveName;}/*开班保存*/$this-CreatePath($file_save_pathState of Qatar;//即使路线不真实则开创路线if(!move_uploaded_file($file[tmp_name][$i],$file_save_path.$file_save_name.$this-GetSuffix($file[''name''][$i]卡塔尔国卡塔尔国卡塔尔国{die($name.''文件上传失利''State of Qatar;}else{$file_save_full_name[]=$file_save_name.$this-GetSuffix($file[''name''][$i]);}}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;}/*核准文件*/privatefunctionCheckFile(){$file=$_FILES[$this-InputName];$file_number=count($file[''name'']State of Qatar;//要上传的公文数for($i=0;$i$file_number;$i++){if(!empty($file[''name''][$i]卡塔尔(قطر‎卡塔尔//文件不为空{$name=$file[''name''][$i];$type=$file[''type''][$i];$size=$file[''size''][$i];$error=$file[''error''][$i];/*规定同意上传文件类型列表*/if(is_array($this-FileType[0])){$file_type=$this-FileType[$i];}else{$file_type=$this-FileType;}/*规定最大上传文件大小*/if(is_array($this-FileMaxSize)){$file_max_size_key=explode(''/'',$type);$file_max_size_key=$file_max_size_key[0];if(is_array($this-FileMaxSize[0])){$file_max_size=$this-FileMaxSize[$i][$file_max_size_key];}else{$file_max_size=$this-FileMaxSize[$file_max_size_key];}}else{$file_max_size=$this-FileMaxSize;}/*文本破绽非常多*/if($error0){die($name. $this-NoteFileFalse);}/*文件类型不符*/if(!in_array($type,$file_type)){die($name. $this-NoteFileType);}/*文件大小当先最大上传文件大小*/if(!is_null($file_max_size)$size$file_max_size){die($name. $this-NoteFileSize);}}}}/*获得文件后缀名*/privatefunctionGetSuffix($fileName){returnsubstr($fileName,strrpos($fileName,.));}/*固然路线不设有则创设路径*/privatefunctionCreatePath($filePath){if(!file_exists($filePathState of Qatar){mkdir($filePath卡塔尔(قطر‎;}}} 使用方法:接着以本文最早所举事例来声明该类的调用方法:$upload_obj = new Upload(卡塔尔国; // 文件上传对象$upload_obj-InputName = ''upload_test''; // 文件上传域控件名$upload_obj-FileType = array(array(''image/jpeg'', ''image/png''卡塔尔国, array(''audio/mpeg'', ''video/x-msvideo''卡塔尔State of Qatar; // 允许上传的文件类型$upload_obj-FileMaxSize = array(''image'' = 100 * 1024, ''audio'' = 2 * 1024 * 1024, ''video'' = 2 * 1024 * 1024); $upload_obj-FileSavePath = array(''upload/files/s/'', ''upload/files/z/'');$upload_obj-FileSaveName = time();$upload_obj-NoteFileFalse = ''文件八花九裂'';$upload_obj-NoteFileType = ''文件类型不符'';$upload_obj-NoteFileSize = ''文件大小超过'';$file_save_full_name = $upload_obj-UploadFile(State of Qatar; // 上传并获取文件全名总计:就此可轻巧实现多少文本上传,其实聊到底用到了PHP组文件上传,要静心的正是控件名的name后别忘了加上[],那样的裨益正是碰到三个文件上传时就绝不在调用层实行巡回或一个三个管理上传了,我们的应用也由此而轻巧。

演示代码:

 代码如下

<form action="" method="post" enctype="multipart/form-data" >
<input type="file" name="uploadfile[]">   命名必是那样有"[]"
<input type="file" name="uploadfile[]">

//设置允许顾客上传的文件类型。
$type = array('gif', 'jpg', 'png', 'zip', 'rar');
$upload = new uploadfile($_files['uploadfile'], '/', 1024*1024, $type);
参数表明:1:表单的文本,2:上传目录,3:协理文件大小,4:允许文件类型
$icount = $upload->upload();
if($icount > 0卡塔尔(قطر‎ { //上传成功
   print_r($upload->getsaveinfo());
  */

class uploadfile {
var $postfile = array(卡塔尔(قطر‎;       // 客商上传的文书
var $custompath = "";          // 自定义文件上传路线
var $maxsize = "";             // 文件最大尺寸
var $lasterror = "";           // 最终一次失误信息
var $allowtype = array('gif', 'jpg', 'png', 'zip', 'rar', 'txt', 'doc', 'pdf');
var $endfilename = "";         // 最后保存的文书名
var $saveinfo = array(State of Qatar;       // 保存文件的结尾音信
var $root_dir = ""; // 项目在硬盘上的岗位

/**
* 布局函数
* @access public
*/

 代码如下

function uploadfile($arrfile, $path="_", $size = 2097152, $type = 0) {
   $this->postfile     = $arrfile;
   $this->custompath   = $path == "_" ? "" : $path ;
   $this->maxsize      = $size;
   if($type!=0)   $this->allowtype   = $arrfile;
   $this->root_dir      = $_server['document_root'];
   $this->_mkdir($this->custompath);
}

/**
*威尼斯登录首页, 文件上传的中坚代码
* @access public
* @return int 上传成功文件数
*/

 代码如下

function upload() {
   $ilen = sizeof($this->postfile['name']);
   for($i=0;$i<$ilen;$i++){
    if ($this->postfile['error'][$i] == 0卡塔尔国 { //上传时未有产生错误
      //取当前文件名、不经常文件名、大小、扩大名,后边将用到。
     $sname   = $this->postfile['name'][$i];
     $stname = $this->postfile['tmp_name'][$i];
     $isize   = $this->postfile['size'][$i];
     $stype   = $this->postfile['type'][$i];
     $sextn   = $this->_getextname($sname);
   
     //检查评定当前上传文件大小是还是不是合法。
     if($this->_checksize){
      $this->lasterror = "您上传的文书[".$sname."],超过系统援救大小!";
      $this->_showmsg($this->lasterror);
      continue;
     }

     if(!is_uploaded_file($stname)) {
      $this->lasterror = "您的文书不是经过符合规律渠道上传!";
      $this->_showmsg($this->lasterror);
      continue;
     }
     $_filename = basename($sname,".".$sextn)."_".time().".".$sextn;
     $this->endfilename = $this->custompath.$_filename;
   
     if(!move_uploaded_file($stname, $this->root_dir.$this->endfilename)) {
      $this->lasterror = $this->postfile['error'][$i];
      $this->_showmsg($this->lasterror);
      continue;
     }

     //存款和储蓄当前文件的有关音信,以便别的程序调用。
     $this->save_info[] =   array("name" => $sname, "type" => $sextn, "size" => $isize,   "path" => $this->endfilename);
    }
   }

   return sizeof($this->save_info);
}

 

 

/**
* 得到上传音讯
* @access public
* @return array 保存音讯
*/
function getsaveinfo(){
   return $this->save_info;
}

 

/**
* 获得文件名的强盛名
* @access private
* @return string 重回文件扩张名
*/
private function _getextname($filename){
   $arrparts = pathinfo($filename);
   return $arrparts['extension'];
}

/**
* 推断文件大小
* @access private
* @return boolean 传入size大于系统定义,则true,反之false
*/
private function _checksize($size){
   return $size > $this->maxsize;
}

/**
* 输出错误音讯
* @access private
* @return void
*/
private function _showmsg($msg){
   printf("<b><错误消息:></b> %s <br>n", $msg卡塔尔(قطر‎;
}

/**
* 新扩大多级目录
* @access private
* @return void
*/
private function _mkdir($p){
   $ap = split('[/]', $p);
   foreach($ap as $v){
    if(!empty($v)){
     if(empty($path)) $path=$v;
     else $path.='/'.$v;
     file_exists($this->root_dir."/".$path) or mkdir($this->root_dir."/".$path);
    }
   }
}
}

/*

}

 

/**//*
//注意,上传组件name属性不管是二个照旧多个都要动用数组情势,如:
<input type="file" name="user_upload_file[]">
<input type="file" name="user_upload_file[]">

//如若客商点击了上传按键。
if ($_post['action'] == "上传") {
//设置允许顾客上传的文件类型。
$type = array('gif', 'jpg', 'png', 'zip', 'rar');
//实例化上传类,第二个参数为顾客上传的文件组、第一个参数为存款和储蓄路径、
//第1个参数为文件最大尺寸。要是不填则默以为2m
//第几个参数为充许顾客上传的项目数组。假如不填则默认为gif, jpg, png, zip, rar, txt, doc, pdf
$upload = new uploadfile($_files['user_upload_file'], 'j:/tmp', 100000, $type);
//上传顾客文件,重回int值,为上传成功的文书个数。
$num = $upload->upload();
if ($num != 0) {
echo "上传成功<br>";
//获得文件的关于新闻,文件名、类型、大小、路线。用print_r(卡塔尔国打字与印刷出来。
print_r($upload->getsaveinfo());

echo $num."个文本上传成功";
}
else {
echo "上传战败<br>";
}
}

* @(#)uploadfile.php
*
* 可同期管理客户八个上传文件。效验文件有效性后存款和储蓄至钦点目录。
* 可回到上传文件的连锁有用音信供其余程序选择。(如文件名、类型、大小、保存路线)
* 使用方法请见本类尾巴部分(uploadfile类使用注释)新闻。
*
*/
class uploadfile {

var $user_post_file = array(卡塔尔(قطر‎; //客户上传的文书
var $save_file_path;    //寄存客户上传文件的路线
var $max_file_size;     //文件最大尺寸
var $last_error;     //记录最终一遍失误新闻
//暗许允许客户上传的文件类型
var $allow_type = array('gif', 'jpg', 'png', 'zip', 'rar', 'txt', 'doc', 'pdf');
var $final_file_path; //最后保存的文本名

var $save_info = array(卡塔尔; //再次回到一组有用消息,用于提示顾客。

/**//**
* 结构函数,用与初叶化相关音信,客商待上传文件、存款和储蓄路径等
*
* @param array $file 客商上传的文书
* @param string $path 存款和储蓄顾客上传文件的门道
* @param integer $size 允许客户上传文件的分寸(字节卡塔尔(قطر‎
* @param array $type   此数组中贮存允计顾客上传的文件类型
*/
function uploadfile($file, $path, $size = 2097152, $type = '') {
$this->user_post_file = $file;
$this->save_file_path = $path;
$this->max_file_size = $size; //假如顾客不填写文件大小,则默认为2m.
if ($type != '')
   $this->allow_type = $type;
}

 

 

/**//**
* 存款和储蓄客商上传文件,核准合法性通过后,存款和储蓄至钦定地点。
* @access public
* @return int    值为0时上传退步,非0表示上传成功的个数。
*/
function upload() {

for ($i = 0; $i < count($this->user_post_file['name']); $i++) {
   //假使当前文件上传成效,则实践下一步。
   if ($this->user_post_file['error'][$i] == 0) {
    //取当前文件名、有的时候文件名、大小、扩展名,后面将用到。
    $name = $this->user_post_file['name'][$i];
    $tmpname = $this->user_post_file['tmp_name'][$i];
    $size = $this->user_post_file['size'][$i];
    $mime_type = $this->user_post_file['type'][$i];
    $type = $this->getfileext($this->user_post_file['name'][$i]);
    //检查评定当前上传文件大小是或不是合法。
    if (!$this->checksize($size)) {
     $this->last_error = "the file size is too big. file name is: ".$name;
     $this->halt($this->last_error);
     continue;
    }
    //检查测验当前上传文件扩张名是还是不是合法。
    if (!$this->checktype($type)) {
     $this->last_error = "unallowable file type: .".$type." file name is: ".$name;
     $this->halt($this->last_error);
     continue;
    }
    //检查测量检验当前上传文件是还是不是违法提交。
    if(!is_uploaded_file($tmpname)) {
     $this->last_error = "invalid post file method. file name is: ".$name;
     $this->halt($this->last_error);
     continue;
    }
    //移动文件后,重命名文件用。
    $basename = $this->getbasename($name, ".".$type);
    //移动后的文本名
    $saveas = $basename."-".time().".".$type;
    //组合新文件名再存到钦点目录下,格式:存储路线 + 文件名 + 时间 + 扩张名
    $this->final_file_path = $this->save_file_path."/".$saveas;
    if(!move_uploaded_file($tmpname, $this->final_file_path)) {
     $this->last_error = $this->user_post_file['error'][$i];
     $this->halt($this->last_error);
     continue;
    }
    //存储当前文件的有关音讯,以便其余程序调用。
    $this->save_info[] = array("name" => $name, "type" => $type,
           "mime_type" => $mime_type,
                             "size" => $size, "saveas" => $saveas,
                             "path" => $this->final_file_path);
   }
}
return count($this->save_info卡塔尔(قطر‎; //再次来到上传成功的公文数量
}

/**//**
* 重返一些得力的音讯,以便用于其余地点。
* @access public
* @return array 再次来到最后保存的门道
*/
function getsaveinfo() {
return $this->save_info;
}

/**//**
* 检测顾客提交文件大小是不是合法
* @param integer $size 客户上传文件的尺寸
* @access private
* @return boolean 假设为true表达大小合法,反之违规
*/
function checksize($size) {
if ($size > $this->max_file_size) {
   return false;
}
else {
   return true;
}
}

/**//**
* 检验顾客提交文件类型是还是不是合法
* @access private
* @return boolean 如若为true表明项目合法,反之不合规
*/
function checktype($extension) {
foreach ($this->allow_type as $type) {
   if (strcasecmp($extension , $type) == 0)
    return true;
}
return false;
}

/**//**
* 呈现出错音讯
* @param $msg    要显得的失误消息    
* @access private
*/
function halt($msg) {
printf("<b><uploadfile error:></b> %s <br>n", $msg);
}

/**//**
* 取文件扩大名
* @param string $filename 给定要取扩展名的文本
* @access private
* @return string      再次回到给定文件扩大名
*/
function getfileext($filename) {
$stuff = pathinfo($filename);
return $stuff['extension'];
}
/**//**
* 取给定文件文件名,不满含扩充名。
* eg: getbasename("j:/hexuzhong.jpg"); //返回 hexuzhong
*
* @param string $filename 给定要取文件名的公文
* @access private
* @return string 重返文件名
*/
function getbasename($filename, $type) {
$basename = basename($filename, $type);
return $basename;
}
}
/**//******************** uploadfile类使用注释

*/
?>

贰个回顾实例

<form enctype="multipart/form-data" action="up.php" method="post">
send this file: <input name="userfile[]" type="file" /><br>
send this file: <input name="userfile[]" type="file" /><br>
send this file: <input name="userfile[]" type="file" /><br>
<input type="submit" value="send file" />
</form>

<?php
// in php versions earlier than 4.1.0, $http_post_files should be used instead
// of $_files.

$uploaddir = './';
/*
print "<pre>";

if (move_uploaded_file($_files['userfile']['tmp_name'], $uploadfile)) {
print "file is valid, and was successfully uploaded. ";
print "here's some more debugging info:n";
print_r($_files);
} else {
print "possible file upload attack! here's some debugging info:n";
print_r($_files);
}

print "</pre>";
*/
?>

<?php

function rearrayfiles(&$file_post) {

$file_ary = array();
$file_count = count($file_post['name']);
$file_keys = array_keys($file_post);

for ($i=0; $i<$file_count; $i++) {
foreach ($file_keys as $key) {
$file_ary[$i][$key] = $file_post[$key][$i];
}
}

return $file_ary;
}

print "<pre>";

if ($_files['userfile']) {
$file_ary = rearrayfiles($_files['userfile']);

本文由威尼斯在线注册平台发布于热门新闻,转载请注明出处:并且不同的上传域可以上传不同的文件类型,   命名必是这样有"

上一篇:解决上面案例繁琐的操作问题,Server实例的服务 下一篇:没有了
猜你喜欢
热门排行
精彩图文