当前位置:首页 > PHP教程 > php上传下载 > 列表

PHP文件上传之多文件上传的实现思路

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-07 13:53:27 浏览: 评论:0 

这篇文章主要介绍了PHP文件上传之多文件上传的实现思路的相关资料,需要的朋友可以参考下。

多文件上传的两种情况

①使用多个name值

  1. <input type="file" name="file1"> 
  2. <input type="file" name="file2"> 
  3. <input type="file" name="file3"> 
  4. <input type="file" name="file4"> 

a.点击提交之后接收到的数据格式

  1. Array 
  2. [file1] => Array 
  3. [name] => 8.png 
  4. [type] => image/png 
  5. [tmp_name] => G:\wamp\tmp\php737.tmp 
  6. [error] => 0 
  7. [size] => 200 
  8. [file2] => Array 
  9. [name] => 28.png 
  10. [type] => image/png 
  11. [tmp_name] => G:\wamp\tmp\php738.tmp 
  12. [error] => 0 
  13. [size] => 6244 
  14. [file3] => Array 
  15. [name] => 54a296f8n6787b34c.png 
  16. [type] => image/png 
  17. [tmp_name] => G:\wamp\tmp\php739.tmp 
  18. [error] => 0 
  19. [size] => 3143 
  20. [file4] => Array 
  21. [name] => 54c0573dncb4db6f7.jpg 
  22. [type] => image/jpeg 
  23. [tmp_name] => G:\wamp\tmp\php788.tmp 
  24. [error] => 0 
  25. [size] => 5404 

从这种格式可以看出来,每一个文件对应一个数组单元

所以使用foreach遍历数组,并对每个数组单元进行文件上传函数调用

b.点击提交后的操作

①接收上传的文件信息

$file = $_FILES;

②引入上传函数

include('./functions.php');

③设置文件保存路径

$path = './uploads/'; // 此目录需要手动创建

④调用文件上传函数

  1. foreach($file as $v){ 
  2. $info = uploadFile($v,$path); 

⑤判断上传状态

  1. if($info['isok']){ 
  2. echo '上传成功'.$info['message']; 
  3. else { 
  4. echo '上传失败'.$info['message']; 

②使用单个name值

a.第一种写法

  1. <input type='file' name="file[]"
  2. <input type='file' name="file[]"
  3. <input type='file' name="file[]"

b.第二种写法

<input type="file" name="file[]" multiple>

c.点击提交之后,接收到的数据格式

  1. Array 
  2. [userpic] => Array 
  3. [name] => Array 
  4. [0] => 8.png 
  5. [1] => 9b2d7581fba543ec9bcf95e91018915a.gif 
  6. [2] => 12.jpg 
  7. [type] => Array 
  8. [0] => image/png 
  9. [1] => image/gif 
  10. [2] => image/jpeg 
  11. [tmp_name] => Array 
  12. [0] => G:\wamp\tmp\php85E5.tmp 
  13. [1] => G:\wamp\tmp\php85E6.tmp 
  14. [2] => G:\wamp\tmp\php8635.tmp 
  15. [error] => Array 
  16. [0] => 0 
  17. [1] => 0 
  18. [2] => 0 
  19. [size] => Array 
  20. [0] => 200 
  21. [1] => 16503 
  22. [2] => 19443 

从这种格式可以看出来,是将上传的文件信息分开保存到每个下标中。

所以要做的事情就是拼接出来一个完整的文件信息,一个一维数组。

  1. Array( 
  2. [name] => 54c0573dncb4db6f7.jpg 
  3. [type] => image/jpeg 
  4. [tmp_name] => G:\wamp\tmp\php788.tmp 
  5. [error] => 0 
  6. [size] => 5404 

所以要进行的操作,是遍历$_FILES['file'] 然后从中取出每条上传文件的信息

d.点击提交后的操作

①接收上传的文件信息

$file = $_FILES['file'];

②引入上传函数

include('./functions.php');

③设置文件保存路径

$path = './uploads/'; // 此目录需要手动创建

④调用文件上传函数

  1. foreach($file['name'as $key=>$value){ 
  2. $data['name'] = $file['name'][$key]; 
  3. $data['type'] = $file['type'][$key]; 
  4. $data['tmp_name'] = $file['tmp_name'][$key]; 
  5. $data['error'] = $file['error'][$key]; 
  6. $data['size'] = $file['size'][$key]; 
  7. $info = uploadFile($data,$path); 

⑤判断上传状态

  1. if($info['isok']){ 
  2. echo '上传成功'.$info['message']; 
  3. else { 
  4. echo '上传失败'.$info['message']; 

a.遍历$file['name'] 只是为了获取$key

b.每遍历一次,取出相对应下标的文件信息,赋值给一个新数组中对应的键

如第一次 $key = 0;

$data['name'] = $file['name'][0]; // 相当于取出了第一个文件的名字

$data['type'] = $file['type'][0]; // 相当于取出了第一个文件的类型

...

第一次遍历完成之后

  1. $data = array
  2. [name] => 54c0573dncb4db6f7.jpg 
  3. [type] => image/jpeg 
  4. [tmp_name] => G:\wamp\tmp\php788.tmp 
  5. [error] => 0 
  6. [size] => 5404 
  7. ); 

这样就取出了第一个文件的所有信息

然后调用上传函数,进行文件上传处理

第二次遍历时$key=1,相当于获取第二个上传文件的信息

Tags: PHP文件上传

分享到: