php文件上传实验总结,总结三种php多文件上传的方法

介绍三种多文件上传的方法,前两种都是直接遍历三维超全局数组$_FILES,最后一种是先定义一个单文件上传函数,再循环调用该函数,完成多文件的上传。1.当多文件上传表单中多个上传文件的name属性为“pic[]”形式时,

也即表单为这种形式:

可用foreach 循环 上传多个文件:

//1.获取要上传文件的信息

$up_info=$_FILES['pic'];

$ob_path="../system";

$typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型

for($i=0;$i

//2.判断文件是否上传错误

if($up_info['error'][$i]>0){

switch($up_info['error'][$i]){

case 1:

$err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";

break;

case 2:

$err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";

break;

case 3:

$err_info="文件只有部分被上传";

break;

case 4:

$err_info="没有文件被上传";

break;

case 6:

$err_info="找不到临时文件夹";

break;

case 7:

$err_info="文件写入失败";

break;

default:

$err_info="未知的上传错误";

break;

}

continue($err_info);

}

//3.判断文件上传的类型是否合法

if(!in_array($up_info['type'][$i],$typelist)){

continue('文件类型错误!'.$up_info['type'][$i]);

}

//4.上传文件的大小过滤

if($up_info['size'][$i]>1000000){

continue('文件大小超过1000000');

}

//5.上传文件名处理

$exten_name=pathinfo($up_info['name'][$i],PATHINFO_EXTENSION);

do{

$main_name=date('YmHis'.'--'.rand(100,999));

$new_name=$main_name.'.'.$exten_name;

}while(file_exists($to_path.'/'.$new_name));

//6.判断是否是上传的文件,并执行上传

if(is_uploaded_file($up_info['tmp_name'][$i])){

if(move_uploaded_file($up_info['tmp_name'][$i],$ob_path.'/'.$new_name)){

echo '文件上传成功!';

}else{

echo '上传文件移动失败!';

}

}else{

echo '文件不是上传的文件';

}

} //for循环的括号

2.当多文件上传表单中多个上传文件的name属性为“pic,text,doc,pdf”形式时,

也即表单为这种形式:

也可用foreach 循环 上传多个文件:

//1.获取要上传文件的信息

$up_info=$_FILES;

$ob_path="..\system";

$typelist=array("image/gif","image/jpeg","image/pjpeg","image/png"); //定义运行的上传文件类型

foreach($up_info as $k_name=>$value){ //用foreach循环 处理多个文件的上传

//2.判断文件是否上传错误

if($up_info[$k_name]['error']>0){

switch($up_info['error'][$i]){

case 1:

$err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";

break;

case 2:

$err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";

break;

case 3:

$err_info="文件只有部分被上传";

break;

case 4:

$err_info="没有文件被上传";

break;

case 6:

$err_info="找不到临时文件夹";

break;

case 7:

$err_info="文件写入失败";

break;

default:

$err_info="未知的上传错误";

break;

}

continue($err_info);

}

//3.判断文件上传的类型是否合法

if(!in_array($up_info[$k_name]['type'],$typelist)){

continue('文件类型错误!'.$up_info[$k_name]['type']);

}

//4.上传文件的大小过滤

if($up_info[$k_name]['size']>100000){

echo '文件大小超过**';

continue;

}

//5.上传文件名处理

$exten_name=pathinfo($up_info[$k_name]['name'],PATHINFO_EXTENSION);

do{

$main_name=date('YmHis'.'--'.rand(100,999));

$new_name=$main_name.'.'.$exten_name;

}while(file_exists($to_path.'/'.$new_name));

//6.判断是否是上传的文件,并执行上传

if(is_uploaded_file($up_info[$k_name]['tmp_name'])){

if(move_uploaded_file($up_info[$k_name]['tmp_name'],$ob_path.'/'.$new_name)){

echo '文件上传成功!';

}else{

echo '上传文件移动失败!';

}

}else{

echo '文件不是上传的文件';

}

} //for循环的括号

//3.上面的循环是嵌入到文件上传的代码中的,可能有点不好理解,这儿提供第三种法,

//先定义单个文件上传的函数,再循环调用这个函数,每次传入一个文件的上传信息,

//也可以到达多文件上传的目的,而且这种方式,更容易理解。

//上传的表单的形式和第二种方法中的相同,即:

//定义函数如下:

/*

*单文件上传函数

*@param array $up_info 记录上传文件信息的超全局数组

*@param string $to_path 上传文件的目标路径

*@param array $typlist 允许的文件类型

*@param int $file_size允许的文件大小

*@return string 上传失败,返回失败的原因,

*

* 成功返回包括文件名的路径。

*/

function upload_fun($up_info,$to_path,$typelist=array(),$file_size=2000000){

//1.判断文件上传是否错误

if($up_file['error']>0){

switch($up_info['error']){

case 1:

$err_info="上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";

break;

case 2:

$err_info="上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";

break;

case 3:

$err_info="文件只有部分被上传";

break;

case 4:

$err_info="没有文件被上传";

break;

case 6:

$err_info="找不到临时文件夹";

break;

case 7:

$err_info="文件写入失败";

break;

default:

$err_info="未知的上传错误";

break;

}

return $err_info;

die();

}

//2.判断上传文件类型是否合法

if(count($typelist)>0){

if(!in_array($up_info['type'],$typelist)){

$err_info='文件类型不合法!'.$up_info['type'];

return $err_info;

die();

}

}

//4.判断上传文件大小是否超出允许值

if($up_info['size']>$file_size){

return $err_info='文件大小超过'.$file_size;

die();

}

//5.上传文件重命名

$exten_name=pathinfo($up_info['name'],PATHINFO_EXTENSION);

do{

$main_name=date('YmHis'.'--'.rand(100,999));

$new_name=$main_name.'.'.$exten_name;

}while(file_exists($to_path.'/'.$new_name));

//6.判断是否是上传的文件,并移动文件

if(is_uploaded_file($up_info['tmp_name'])){

if(move_uploaded_file($up_info['tmp_name'],$to_path.'/'.$new_name)){

$err_info=$to_path.'/'.$new_name;

return $err_info;

die();

}else{

return $err_info='上传文件移动失败!';

die();

}

}else{

return $err_info='这个文件不是上传文件!';

die();

}

}

//函数使用方法如下

$multi_info=$_FILES; //接收$_FILES的全部上传信息

$to_path='system'; //上传文件的目标路径

foreach($multi_info as $name=>$up_info){ //foreach 遍历$multi_info

$err_info=upload_fun($up_info,$to_path); //调用单文件上传函数

p($err_info); //输出返回信息;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值