PHP实现的多文件上传类及用法示例
本文实例讲述了PHP实现的多文件上传类及用法。分享给大家供大家参考,具体如下:
1、upFiles.css.php文件
<?php
classUploadFiles{
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($optionsas$key=>$val){
$key=strtolower($key);
//查看传进来的数组里下标是否与成员属性相同
//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);
}
}
}
privatefunctionsetOption($key,$val){
$this->$key=$val;
//echo$this->errorNum."<br>";
}
//检查文件上传路径
privatefunctioncheckfilePath(){
//echo$this->filepath;
if(empty($this->filepath)){
$this->setOption('errorNum',"-5");
returnfalse;
}
if(!file_exists($this->filepath)||!is_writable($this->filepath)){
if(!@mkdir($this->filepath,0755)){
$this->setOption('errorNum','-4');
returnfalse;
}
}
returntrue;
}
//获取错误信息
privatefunctiongetError(){
$str="上传文件{$this->originName}出错---";
switch($this->errorNum){
case4;$str.="没有文件被上传";break;
case3;$str.="文件只被部分上传";break;
case2;$str.="超过文件表单允许大小";break;
case1;$str.="超过php.ini中允许大小";break;
case-1;$str.="未允许的类型";break;
case-2;$str.="文件过大,不能超过".$this->maxsize."个字节";break;
case-3;$str.="上传失败";break;
case-4;$str.="建立文件上传目录失败";break;
case-5;$str.="必须指定上传路径";break;
default;$str.="未知错误";
}
return$str."<br>";
}
//检查文件类型
privatefunctioncheckfileType(){
//echo$this->fileType;
if(!in_array(strtolower($this->fileType),$this->allowtype)){
$this->setOption('errorNum','-1');
returnfalse;
}else{
returntrue;
}
}
//检查文件大小
privatefunctioncheckfileSize(){
if($this->fileSize>$this->maxsize){
$this->setOption('errorNum','-2');
returnfalse;
}else{
returntrue;
}
}
//处理随机文件名称
privatefunctionprorandFile(){
$ch=$this->israndfile;
if($ch=='true'){
returntrue;
}else{
returnfalse;
}
}
//
privatefunctionsetFiles($name="",$tmp_name="",$size="",$error=""){
//检查上传路径
if(!$this->checkfilePath()){
//$this->errorMessg=$this->getError();
returnfalse;
}
//echo$error."<br>";
if($error){
$this->setOption('errorNum',$error);
returnfalse;
}
$arrstr=explode('.',$name);
$type=end($arrstr);
$this->setOption('originName',$name);
$this->setOption('fileSize',$size);
$this->setOption('fileType',$type);
$this->setOption('tmpfileName',$tmp_name);
returntrue;
}
//检查是否有文件上传
functioncheckFile($formname){
if(!@$_FILES[$formname]){
$this->setOption('errorNum',4);
returnfalse;
}else{
returntrue;
}
}
//上传文件
functionuploadeFile($formname){
if(!$this->checkFile($formname)){
$this->errorMessg=$this->getError();
returnfalse;
}
$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;
}
}
//获取上传后的文件名
functiongetnewFile(){
return$this->newfileName;
}
//把文件拷贝到指定的路径
functioncopyFile(){
$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);
returnfalse;
}else{
returntrue;
}
}else{
returnfalse;
}
}
//上传错误后返回的消息
functiongteerror(){
$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=newUploadFiles(array('filepath'=>'./upload','allowtype'=>array('php','bmp','gif','jpg','png'),'israndfile'=>true,'maxsize'=>'1000000'));
if($upfile->uploadeFile('spic')){
$arrfile=$upfile->getnewFile();
foreach($arrfileas$v){
echo$v,"<br/>";
}
echo"上传成功!";
}else{
$err=$upfile->gteerror();
if(is_array($err)){
foreach($erras$v1){
echo$v1,"<br/>";
}
}else{
echo$err;
}
//var_dump($err);
}
//var_dump($upfile);
?>
HTML文件:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>无标题文档</title>
<scripttype="text/javascript">
functionCheck(){
//alert('dddd');
for(i=1;i<9;i++){
if(document.getElementById('v'+i).value==''){
document.getElementById('v'+i).name='uu';
}
}
}
</script>
</head>
<body>
<formname="upfile"action="uploade.php"method="post"enctype="multipart/form-data">
<inputtype="file"name="spic[]"id="v1"/><br/>
<inputtype="file"name="spic[]"id="v2"/><br/>
<inputtype="file"name="spic[]"id="v3"/><br/>
<inputtype="file"name="spic[]"id="v4"/><br/>
<inputtype="file"name="spic[]"id="v5"/><br/>
<inputtype="file"name="spic[]"id="v6"/><br/>
<inputtype="file"name="spic[]"id="v7"/><br/>
<inputtype="file"name="spic[]"id="v8"/><br/>
<inputtype="submit"name="sub"value="提交"onclick="returnCheck()"/>
<inputtype="reset"name="res"value="重填"/>
</form>
</body>
</html>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。