欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP實現(xiàn)的多文件上傳類及用法示例

 更新時間:2016年05月06日 11:52:55   作者:果凍  
這篇文章主要介紹了PHP實現(xiàn)的多文件上傳類及用法,詳細分析了php實現(xiàn)的多文件上傳類與具體的使用技巧,需要的朋友可以參考下

本文實例講述了PHP實現(xiàn)的多文件上傳類及用法。分享給大家供大家參考,具體如下:

1、upFiles.css.php 文件

<?php
class UploadFiles{
 private $maxsize = '1000000'; //允許上傳文件最大長度
 private $allowtype = array('jpg','png','gif','jpeg');//允許上傳文件類型
 private $israndfile = true;//是否隨機文件名
 private $filepath;//上傳路徑
 private $originName;//上傳的源文件
 private $tmpfileName;//臨時文件名
 private $newfileName;//新文件名
 private $fileSize;//文件大小
 private $fileType;//文件類型
 private $errorNum = 0;//錯誤號
 private $errorMessg = array();//錯誤消息
 //對成員初始化
 function __construct($options = array()){
 foreach($options as $key=>$val){
  $key = strtolower($key);
  //查看傳進來的數(shù)組里下標是否與成員屬性相同
  //print_r(array_keys(get_class_vars(get_class($this))));
  if(!in_array($key,array_keys(get_class_vars(get_class($this))))){
  continue;
  }else{
  $this->setOption($key,$val);
  }
 }
 }
 private function setOption($key,$val){
   $this->$key = $val;
 //echo $this->errorNum."<br>";
 }
 //檢查文件上傳路徑
 private function checkfilePath(){
 //echo $this->filepath;
 if(empty($this->filepath)){
  $this->setOption('errorNum',"-5");
  return false;
 }
 if(!file_exists($this->filepath) || !is_writable($this->filepath)){
  if(!@mkdir($this->filepath,0755)){
  $this->setOption('errorNum','-4');
  return false;
  }
 }
 return true;
 }
 //獲取錯誤信息
 private function getError(){
 $str = "上傳文件{$this->originName}出錯---";
 switch($this->errorNum){
  case 4; $str .= "沒有文件被上傳";break;
  case 3; $str .= "文件只被部分上傳";break;
  case 2; $str .= "超過文件表單允許大小";break;
  case 1; $str .= "超過php.ini中允許大小";break;
  case -1; $str .= "未允許的類型";break;
  case -2; $str .= "文件過大,不能超過".$this->maxsize."個字節(jié)";break;
  case -3; $str .= "上傳失敗";break;
  case -4; $str .= "建立文件上傳目錄失敗";break;
  case -5; $str .= "必須指定上傳路徑";break;
  default; $str .= "未知錯誤";
 }
 return $str."<br>";
 }
 //檢查文件類型
 private function checkfileType(){
 //echo $this->fileType;
 if(!in_array(strtolower($this->fileType),$this->allowtype)){
 $this->setOption('errorNum','-1');
  return false;
 }else{
  return true;
 }
 }
 //檢查文件大小
 private function checkfileSize(){
 if($this->fileSize > $this->maxsize){
  $this->setOption('errorNum','-2');
  return false;
 }else{
  return true;
 }
 }
 //處理隨機文件名稱
 private function prorandFile(){
 $ch = $this->israndfile;
 if($ch == 'true'){
  return true;
 }else{
  return false;
 }
 }
 //
 private function setFiles($name="",$tmp_name="",$size="",$error=""){
 //檢查上傳路徑
 if(!$this->checkfilePath()){
  //$this->errorMessg = $this->getError();
  return false;
 }
 //echo $error."<br>";
 if($error){
 $this->setOption('errorNum',$error);
  return false;
 }
 $arrstr  = explode('.',$name);
 $type   = end($arrstr);
 $this->setOption('originName',$name);
 $this->setOption('fileSize',$size);
 $this->setOption('fileType',$type);
 $this->setOption('tmpfileName',$tmp_name);
 return true;
 }
 //檢查是否有文件上傳
 function checkFile($formname){
 if(!@$_FILES[$formname]){
  $this->setOption('errorNum',4);
  return false;
 }else{
  return true;
 }
 }
 //上傳文件
 function uploadeFile($formname){
 if(!$this->checkFile($formname)){
  $this->errorMessg = $this->getError();
  return false;
 }
 $return  = true;
 $name   = @$_FILES[$formname]['name'];
 $tmp_name = @$_FILES[$formname]['tmp_name'];
 $size   = @$_FILES[$formname]['size'];
 $error  = @$_FILES[$formname]['error'];
 //$type   = $_FILES[$formname]['type'];
 if(is_array($name)){
  $errors = array();
  for($i=0; $i<count($name); $i++){
  if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
   if(!$this->checkfileSize() || !$this->checkfileType()){
   $errors[] = $this->getError();
   $return = false;
   }
  }else{
   $errors[] = $this->getError();
   $return = false;
  }
  if(!$return) $this->setFiles();
  }
  if($return){
  $newfileN = array();
  for($i=0; $i<count($name); $i++){
   if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
   if(!$this->copyFile()){
    $errors[] = $this->getError();
    $return = false;
   }else{
    $newfileN[] = $this->newfileName;
   }
   }
   $this->newfileName = $newfileN;
  }
  }
  //print_r($errors);
  $this->errorMessg = $errors;
  //echo $errors;
  return $return;
 }else{
  if($this->setFiles($name,$tmp_name,$size,$error)){
  $return = true;
  if($error) var_dump($error);
  if($this->checkfileSize() && $this->checkfileType()){
  }else{
   $return = false;
  }
  }else{
  $return = false;
  }
  if(!$return){
  $this->errorMessg = $this->getError();
  }
  return $return;
 }
 }
 //獲取上傳后的文件名
 function getnewFile(){
  return $this->newfileName;
 }
 //把文件拷貝到指定的路徑
 function copyFile(){
 $filepath = rtrim($this->filepath,'/')."/";
 if(!$this->errorNum){
  if($this->prorandFile()){
   $this->newfileName = date('Ymdhis').rand(1000,9999).".".$this->fileType;
  }else{
   $this->newfileName = $this->originName;
  }
  if(!move_uploaded_file($this->tmpfileName,$filepath.$this->newfileName)){
  $this->setOption('errorNum',-3);
  return false;
  }else{
  return true;
  }
 }else{
  return false;
 }
 }
 //上傳錯誤后返回的消息
 function gteerror(){
  $err = $this->errorMessg;
 return $err;
 }
 }
?>

2、使用方法

uploade.php 文件:

<?php
//print_r($_FILES['spic']);
header('Content-Type:text/html;charset=utf-8');
//if(@$_FILES['spic'])echo "ddddddddd";;
include('upFiles.css.php');
$upfile = new UploadFiles(array('filepath'=>'./upload','allowtype'=>array('php','bmp','gif','jpg','png'),'israndfile'=>true,'maxsize'=>'1000000'));
if($upfile ->uploadeFile('spic')){
 $arrfile = $upfile ->getnewFile();
 foreach($arrfile as $v){
 echo $v,"<br/>";
 }
 echo "上傳成功!";
}else{
 $err = $upfile ->gteerror();
 if(is_array($err)){
 foreach($err as $v1){
  echo $v1,"<br/>";
 }
 }else{
 echo $err;
 }
 //var_dump($err);
}
//var_dump($upfile);
?>

HTML 文件:

<!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=utf-8" />
<title>無標題文檔</title>
<script type="text/javascript">
function Check(){
 //alert('dddd');
 for(i=1; i<9; i++){
 if(document.getElementById('v'+i).value == ''){
  document.getElementById('v'+i).name = 'uu';
 }
 }
}
</script>
</head>
<body>
<form name="upfile" action="uploade.php" method="post" enctype="multipart/form-data">
<input type="file" name="spic[]" id="v1" /><br/>
<input type="file" name="spic[]" id="v2" /><br/>
<input type="file" name="spic[]" id="v3" /><br/>
<input type="file" name="spic[]" id="v4" /><br/>
<input type="file" name="spic[]" id="v5" /><br/>
<input type="file" name="spic[]" id="v6" /><br/>
<input type="file" name="spic[]" id="v7" /><br/>
<input type="file" name="spic[]" id="v8" /><br/>
<input type="submit" name="sub" value="提交" onclick="return Check()" />
<input type="reset" name="res" value="重填" />
</form>
</body>
</html>

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php文件操作總結(jié)》、《PHP運算與運算符用法總結(jié)》、《PHP網(wǎng)絡編程技巧總結(jié)》、《PHP基本語法入門教程》、《php操作office文檔技巧總結(jié)(包括word,excel,access,ppt)》、《php日期與時間用法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家PHP程序設(shè)計有所幫助。

相關(guān)文章

  • php利用header函數(shù)實現(xiàn)文件下載時直接提示保存

    php利用header函數(shù)實現(xiàn)文件下載時直接提示保存

    相信很多人在實現(xiàn)文件下載功能時會遇到這種情況,本意是點擊下載連接提示保存對話框,事情往往事與愿違,例如PDF這樣的文件會直接在瀏覽器中現(xiàn)實文件內(nèi)容,而不是提示保存。通過下面的方法可以解決這個問題。
    2009-11-11
  • PHP垃圾回收機制簡單說明

    PHP垃圾回收機制簡單說明

    最近有看到一份面試題目,內(nèi)容大概為闡述PHP的垃圾回收機制是怎么一回事。
    2010-07-07
  • php中session_unset與session_destroy的區(qū)別分析

    php中session_unset與session_destroy的區(qū)別分析

    關(guān)于session_unset()和session_destroy()的函數(shù)使用進行介紹。學習php的朋友可以參考下。
    2011-06-06
  • 允許phpmyadmin空密碼登錄的配置方法

    允許phpmyadmin空密碼登錄的配置方法

    在Mysql修改root密碼的命令及方法一文中,我提到了使用phpmyadmin修改Mysql的root密碼的方法,但是當你將phpmyadmin登錄密碼設(shè)置為空密碼時,盡管你通過Mysql命令行方式可以以空密碼進入Mysql,但是當你重新以空密碼登錄phpmyadmin時卻無法登陸
    2011-05-05
  • Laravel中10個有用的用法小結(jié)

    Laravel中10個有用的用法小結(jié)

    這篇文章主要介紹了Laravel中10個有用的用法小結(jié),都是一些比較常用的一些方法,有感興趣的同學可以學習下
    2021-03-03
  • PHP中array_merge和array相加的區(qū)別分析

    PHP中array_merge和array相加的區(qū)別分析

    今天處理一個這樣的問題:如何獲取字符鍵名相同值不同的兩個數(shù)組值集合,用array_merge和數(shù)組相加都不可行,讓我認真比較了下PHP中array_merge和array相加的區(qū)別
    2013-06-06
  • php頁面緩存方法小結(jié)

    php頁面緩存方法小結(jié)

    這篇文章主要介紹了php頁面緩存方法,實例總結(jié)了常用的頁面緩存函數(shù)的用法,并給出了一個完整的緩存實例,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • PHP實現(xiàn)的函數(shù)重載功能示例

    PHP實現(xiàn)的函數(shù)重載功能示例

    這篇文章主要介紹了PHP實現(xiàn)的函數(shù)重載功能,結(jié)合實例形式分析了php面向?qū)ο蟪绦蛟O(shè)計中使用__call方法的重載及構(gòu)造函數(shù)重載相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08
  • PHP實現(xiàn)批量修改文件后綴名的方法

    PHP實現(xiàn)批量修改文件后綴名的方法

    這篇文章主要介紹了PHP實現(xiàn)批量修改文件后綴名的方法,涉及php針對文件的遞歸遍歷及重命名的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • PHP實現(xiàn)的一致性Hash算法詳解【分布式算法】

    PHP實現(xiàn)的一致性Hash算法詳解【分布式算法】

    這篇文章主要介紹了PHP實現(xiàn)的一致性Hash算法,結(jié)合實例形式詳細分析了php一致性Hash算法的概念、原理及相關(guān)實現(xiàn)與使用技巧,需要的朋友可以參考下
    2018-03-03

最新評論