本文实例讲述了PHP实现的多文件上传类及用法。分享给大家供大家参考,具体如下:
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);
//查看传进来的数组里下标是否与成员属性相同
//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.\"个字节\";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>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
本文地址:https://www.stayed.cn/item/17958
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我