PHP实现的多文件上传类及用法示例
来源: 阅读:1238 次 日期:2016-08-24 15:06:47
温馨提示: 小编为您整理了“PHP实现的多文件上传类及用法示例”,方便广大网友查阅!

本文实例讲述了PHP实现的多文件上传类及用法。分享给大家供大家参考,具体如下:

1、upFiles.css.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."
";

}

//检查文件上传路径

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."
";

}

//检查文件类型

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."
";

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

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

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 文件:

//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,"
";

}

echo "上传成功!";

}else{

$err = $upfile ->gteerror();

if(is_array($err)){

foreach($err as $v1){

echo $v1,"
";

}

}else{

echo $err;

}

//var_dump($err);

}

//var_dump($upfile);

?>

HTML 文件:

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

无标题文档









Baidu
map

希望本文所述对大家PHP程序设计有所帮助。

更多信息请查看 网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2026上岸·考公考编培训报班

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们| 联系我们| 人才招聘| 网站声明| 网站帮助| 非正式的简要咨询| 简要咨询须知| 新媒体/短视频平台| 手机站点| 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65099533/13759567129 获取招聘考试信息及咨询关注公众号:
咨询QQ:1093837350(9:00—18:00) 版权所有:
云南网警报警专用图标
Baidu
map