《PHP多文件上傳類,收藏版!》要點:
本文介紹了PHP多文件上傳類,收藏版!,希望對您有用。如果有疑問,可以聯系我們。
歡迎參與《PHP多文件上傳類,收藏版!》討論,分享您的想法,維易PHP學院為您提供專業教程。
文件名:test.php
<必修php
$Str='<form action="uploadfile.php必修Send=More" method="post" enctype="multipart/form-data">';
$Str.='文件上傳1:<input type="file" name="PicPath[]" /><br>';
$Str.='文件上傳2:<input type="file" name="PicPath[]" /><br>';
$Str.='文件上傳3:<input type="file" name="PicPath[]" /><br>';
$Str.='文件上傳4:<input type="file" name="PicPath[]" /><br>';
$Str.='文件上傳5:<input type="file" name="PicPath[]" /><br>';
$Str.='文件上傳6:<input type="file" name="PicPath[]" /><br>';
$Str.='<input type="submit" value="提交確認">';
$Str.='</form>';
echo $Str;
必修>
文件名:uploadfile.php
<必修php
$State=isset($_GET['Send'])必修trim($_GET['Send']):'';
if($State=='More')
{
require('./uploadfilemore.php');
//$FileData;//界說客戶所上傳的文件來源
$AffirmExtension=array('jpg','jpeg','gif','png');//界說我們所確認的有效擴展名有哪些
$UpFileSize=500*1024;//定義我們所上傳文件的年夜小對其約束
$UpSeat='./uploadfile/';//定義上傳文件的具體地位
$UpSubDir='images/';//界說上傳文件的子目錄
$UpLoadMore=new UpLoadMore($_FILES['PicPath'],$AffirmExtension,$UpFileSize,$UpSeat,$UpSubDir);
$Result=$UpLoadMore->FileUpLoad();
print_r($Result);
}
必修>
文件名:uploadfilemore.php
<必修php
/*
文件上傳時必要注意的具體事項有:
1.文件擴大名
2.文件尺寸
3.上傳的地位
4.上傳的子目次
5.上傳的文件名字
6.客戶所上傳的文件數據起源
*/
class UpLoadMore
{
private $FileData;//界說客戶所上傳的文件來源
private $AffirmExtension;//界說我們所確認的有效擴展名有哪些
private $UpFileSize;//定義我們所上傳文件的年夜小對其約束
private $UpSeat;//定義上傳文件的具體地位
private $UpSubDir;//界說上傳文件的子目錄
private $ValidFileData;//界說客戶所上傳的有效的文件數據
private $SelectUPLoadState;//請客戶選擇來確認是否一有錯則全部不上傳1,還是可以部門上傳2
public function __construct($FileData,$AffirmExtension,$UpFileSize,$UpSeat,$UpSubDir,$SelectUPLoadState=2)
{
$this->FileData=$FileData;
$this->AffirmExtension=$AffirmExtension;
$this->UpFileSize=$UpFileSize;
$this->UpSeat=$UpSeat;
$this->UpSubDir=$UpSubDir;
$this->SelectUPLoadState=$SelectUPLoadState;
}
//外部調用返回成果
public function FileUpLoad()
{
//驗證以后是否有文件上傳
if(!$this->CheckFileIsNull())
{
$Back=array();
$Back['ErrorNO']=1;
return $Back;
}
//請客戶選擇來確認是否一有錯則全部不上傳1,還是可以部門上傳2
if($this->SelectUPLoadState==1)
{
//驗證當前客戶所上傳的圖片擴大名是否有效
$FileExtension=$this->CheckExtensionIsValid();
if(!empty($FileExtension))
{
return $FileExtension;
}
//驗證當前客戶所上傳的文件年夜小是否合法
$FiliSize=$this->CheckFileSizeIsValid();
if(!empty($FiliSize))
{
return $FiliSize;
}
}
elseif($this->SelectUPLoadState==2)
{
//驗證當前客戶所上傳的圖片擴大名是否有效
$FileExtension=$this->CheckExtensionIsValid();
//驗證當前客戶所上傳的文件年夜小是否合法
$FiliSize=$this->CheckFileSizeIsValid();
}
//文件上傳保留
$FileSaveState=$this->MoveFileSave($FileExtension,$FiliSize);
if(!empty($FileSaveState))
{
return $FileSaveState;
}
}
//驗證以后客戶所上傳的文件是否為空
private function CheckFileIsNull()
{
if(empty($this->FileData) || !is_array($this->FileData))
{
return false;
}
$ErrorStateCount=0;
foreach ($this->FileData['error'] as $key => $value) {
if($value==4)
{
$ErrorStateCount++;
}
}
if($ErrorStateCount==count($this->FileData['error']))
{
return false;
}
//設置客戶所選擇的多文件,對其數組進行整頓
$this->SetFileData();
return true;
}
//設置客戶所選擇的多文件,對其數組進行整頓
private function SetFileData()
{
$FileArr=array();$DelSeat=array();
//整理出文件上傳所有數組布局
foreach ($this->FileData as $key => $value) {
foreach ($value as $key2 => $value2) {
$FileArr[$key2][$key]=$value2;
}
}
//整頓出沒有上傳的空文件所對應的索引
foreach($this->FileData['error'] as $key => $value) {
if($value==4)
{
$DelSeat[]=$key;
}
}
//刪除沒有上傳的空文件數據
if(!empty($DelSeat))
{
foreach ($DelSeat as $key => $value) {
unset($FileArr[$value]);
}
}
$this->ValidFileData=$FileArr;
return true;
}
//獲取當前文件的擴大名
private function GetCurrentFileExtension($Data)
{
$FileName=$Data['name'];
$FileArr=explode('.',$FileName);
return end($FileArr);
}
//驗證當前客戶所上傳的圖片擴大名是否有效
private function CheckExtensionIsValid()
{
$Back=array();
if(!empty($this->ValidFileData))
{
foreach ($this->ValidFileData as $key => $value) {
$Extension=$this->GetCurrentFileExtension($value);
if(!in_array($Extension,$this->AffirmExtension))
{
$Back['Data'][$key]=$value['name'];
}
}
}
if(!empty($Back))
{
$Back['ErrorNO']=2;
}
return $Back;
}
//驗證當前客戶所上傳的文件年夜小是否合法
private function CheckFileSizeIsValid()
{
$Back=array();
if(!empty($this->ValidFileData))
{
foreach ($this->ValidFileData as $key => $value) {
if($value['size'] > $this->UpFileSize)
{
$Back['Data'][$key][]=$value['name'];
$Back['Data'][$key][]=$value['size'];
}
}
}
if(!empty($Back))
{
$Back['ErrorNO']=3;
}
return $Back;
}
//驗證當前的目錄是否是正當有效的
private function CheckDirIsValid()
{
if(is_dir($this->UpSeat))
{
return true;
}
@mkdir($this->UpSeat);//創立根目錄
chmod($this->UpSeat,0777);//設置當前所創立的文件夾權限為可讀可寫
}
//驗證當前目錄下的子目錄是否是正當有效的
private function CheckSubDirIsValid()
{
if(!empty($this->UpSubDir))
{
if(is_dir($this->UpSeat.$this->UpSubDir))
{
return true;
}
@mkdir($this->UpSeat.$this->UpSubDir);//創立根目錄
chmod($this->UpSeat.$this->UpSubDir,0777);//設置當前所創立的文件夾權限為可讀可寫
}
return '';
}
//依據當前文件夾再創立出年月日的子文件夾
private function CheckYMDDirIsValid()
{
$Path=$this->UpSeat.$this->UpSubDir.date('Ymd');
if(is_dir($Path))
{
return $Path;
}
@mkdir($Path);//創立根目錄
chmod($Path,0777);//設置當前所創立的文件夾權限為可讀可寫
return $Path;
}
//挪動客戶所上傳的文件
private function MoveFileSave($FileExtension='',$FiliSize='')
{
$this->CheckDirIsValid();//驗證當前的目錄是否是正當有效的
$this->CheckSubDirIsValid();//驗證當前目錄下的子目錄是否是正當有效的
$Back=array();
if(!empty($FileExtension) && $FileExtension['ErrorNO']==2)
{
foreach ($FileExtension['Data'] as $key => $value) {
unset($this->ValidFileData[$key]);
}
$Back['Addition']['Extension']['ErrorNO']=2;
$Back['Addition']['Extension']['Data']=$FileExtension['Data'];
}
if(!empty($FiliSize) && $FiliSize['ErrorNO']==3)
{
foreach ($FiliSize['Data'] as $key => $value) {
unset($this->ValidFileData[$key]);
}
$Back['Addition']['Size']['ErrorNO']=3;
$Back['Addition']['Size']['Data']=$FiliSize['Data'];
}
//print_r($this->ValidFileData);
if(!empty($this->ValidFileData))
{
foreach ($this->ValidFileData as $key => $value) {
if(is_uploaded_file($value['tmp_name']))
{
//獲取當前文件擴大名
$Extension=$this->GetCurrentFileExtension($value);
//依據當前文件夾再創立出年月日的子文件夾
$Path=$this->CheckYMDDirIsValid().'/'.date('YmdHis').'_'.mt_rand(100,999).'.'.$Extension;
if(move_uploaded_file($value['tmp_name'],$Path))
{
$Back['ErrorNO']=0;
$Back['Data'][$key]=$Path;
}else{
$Back['ErrorNO']=4;
$Back['Data'][$key]=$value['name'];
}
}else{
$Back['ErrorNO']=4;
$Back['Data'][$key]=$value['name'];
}
}
}
return $Back;
}
}
必修>