文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP---文件上传

2023-09-03 08:07

关注

目录

一、文件上传的概念

二、文件上传的步骤

(1)表单的制作

三、$_FILES详解

(1)name

(2)tmp_name

(3)type

(4)error

(5)size

 四、移动临时文件到目标位置

 五、多文件上传

(1)同名表单

 1:同名文件的数据结构

 2:同名文件的处理方式

(2)不同文件名

 1:不同文件名的数据结构

 2:不同文件名的处理方式


文件上传就是文件从用户本地电脑通过传输方式(web表单)保存到服务器所在电脑指定的目录下。
那么文件上传的原理是什么呢?
用户通过文件上传的表单从本地选择文件上传到服务器,服务器操作系统会将文件保存到临时文件夹中,注意是临时文件夹中,然后服务器开始工作,先判断文件是否有效,然后服务器脚本将有效文件从临时文件夹移动到指定目录下

(1)表单的制作

1:method属性:表单提交方式必须为post
2:enctype属性:form表单属性,主要是规范表单数据的编码方式
在文件上传时,必须等于的值为multipart/form_data
3:上传表单:file表单 

 

    

在接收到上传的文件后,服务器端如何接受呢,这就要说到预定义变量$_FILES,它是专门用来存储用户上传的文件的。要注意上传的文件并不是$_POST接收的,而是$_FILES。同时使用$_FILES接受后他会有六个属性,如下图所示。

 第一个[wenjian]就是上传文件的name值,后面的name,full_path,type,tmp_name,error,size便是说的属性

(1)name

文件在(浏览器端)用户电脑上的名字。(实际用来看文件的后缀)

(2)tmp_name

文件上传到服务器上操作系统保存到临时路径(实际用来给PHP后期使用)

(3)type

MIME(多功能互联网邮件扩展)类型,用来在计算机客户端识别文件类型,就是比如说一个文件用什么打开,用word打开还是记事本等等。 (实际用来判断给什么软件使用)

(4)error

文件上传的代号,用来告知应用软件(PHP)文件接收过程中出现了什么问题。如:
值=0,没有错误发生,文件上传成功
值=1,上传的文件超过了php.in中upload max filesize选项限制的值
值=2,上传的文件大小超过了HTML表单中MAX_FILE_SIZE选项指定的值
值=3,文件只有部分被上传
值=4,没有文件被上传


值=6,找不到临时文件夹,也就是说操作系统对应的临时文件夹不存在
值=7,文件写入失败,也就是说PHP没有权限将临时文件夹移动到
指定目录

 

 (实际用来PHP后期根据代码进行文件判断)

(5)size

文件大小(实际用来判断文件是否保留) 

临时文件移动到目标位置主要分为两步
(1)判断是否是上传的文件is_uploaded_file()
(2)移动文件move_uploaded_file()

 既然想要移动文件,首先我们得获取文件信息,$_FILES['name']可以获取文件,其中的name是表单中的name属性值,获取后我们便需要判断文件是否是上传文件,即is_uploaded_file($_FILES['name']['tmp_name'])需要获得临时路径来判断。

move_uploaded_file($_FILES['name']['tmp_name'],指定路径),他们都有一个返回值,即是否成功,成功为true,否则为false。

 

    

多文件上传顾名思义就是上传多个图片,而上传多个图片又分为同名表单和批量解决问题
在具体的实例中

同名表单:当商品需要上传多个图片进行展示的时候,如上传的是同一个物品的不同角度,这时候就用到[]就行。

批量解决问题:取得name属性都不一样

(1)同名表单

             1:同名文件的数据结构

 

';   print_r($_FILES);?>
    

 同名表单将名字形成一个数组,而且同时将文件对应的五个要素:name,tmp_name,size,type,error都形成对应数量的数组,每个文件上传对应数组元素的下标都是一样的,如:name[0]和tmp_name[0]都属于同一个文件。

           2:同名文件的处理方式

';   //先判断文件是否存在并且是不是数组即是不是同名文件   if(isset($_FILES['image']['name'])&&is_array($_FILES['image']['name'])){   $images=array();   foreach($_FILES['image']['name'] as $k=>$file){   //这个k就相当于数字下标   $images[]=array(   'name'=>$file,   'tmp_name'=>$_FILES['image']['tmp_name'][$k],   'type'=>$_FILES['image']['type'][$k],   'error'=>$_FILES['image']['error'][$k],   'size'=>$_FILES['image']['size'][$k]   );   }   }   print_r($images);   //开始遍历数组一个一个保存   foreach($images as $f){   if(is_uploaded_file($f['tmp_name'])){   move_uploaded_file($f['tmp_name'],'upload/'.$f['name']);   }   }?>

 

(2)不同文件名

          1:不同文件名的数据结构

    
';   print_r($_FILES);?>

 批量上传:不同名表单每个文件都会形成一个属于自己独立的5个元素的数组

            2:不同文件名的处理方式

来源地址:https://blog.csdn.net/gaoqiandr/article/details/128513107

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯