服务端php之文件上传
知识点
- echo $_SERVER['PHP_SELF']; 自动获取当前文件的路劲(即提交地址为当前页面)
- 当一个表单有文件域(即文件上传)的时候,method(提交方式)要设置post,这样更加安全,enctype这个属性为编码类型,固定格式为 multipart/form-data
- 当文件上传成功后,系统会在服务端开辟一个临时目录来存放上传的文件,而上传之后,会立马消除这个目录
- UPLOAD_ERR_OK(这是一个记号,其值为0时)
- PHP 中设置全局变量的两种方式:
- (1) global $message;
- (2) $GLOBALS['message']
$avator['error']分析
- 其值为0(UPLOAD_ERR_OK)时:表示文件上传成功
- 其值为1(UPLOAD_ERR_INT_SIZE):表示文件超过了 php.ini 文档中的 upload_max_filesize (服务端支持的单个文件上传的大小)的值。当出现这个情况时,只要根据情况增大这个值即可
- 其值为2(UPLOAD_ERR_FORM_SIZE):表示上传的文件超过了HTML表单中MAX_FILE_SIZE选项指定的值
- 其值为3(UPLOAD_ERR_PARTIAL):表示只有部分被上传
- 其值为4(UPLOAD_ERR_NO_FILE):表示没有文件被上传
错误分析
- Warning: POST Content-Length of 17545049 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
- 当出现上面这句警告的时候,表示超过了服务端所支持的最大的请求体的体积,只需再 php.ini 文档中增大 post_max_size 的大小即可
测试代码
html
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <input type="file" name="avator">
<button type="submit">上传</button>
<!-- 当 $message 有值的时候显示 -->
<?php if (isset($message)): ?>
<p style="color: red;"><?php echo $message; ?></p>
<?php endif ?>
</form>
php
<?php function upload () {
if (empty($_FILES['avator'])) {
// $message 要设置为全局变量
$GLOBALS['message'] = '亲,您传的是什么啊!';
return;
} $avator = $_FILES['avator'];
// $avator => array(5) {
// ["name"]=>
// string(9) "pic02.jpg"
// ["type"]=>
// string(10) "image/jpeg"
// ["tmp_name"]=>
// string(26) "C:\Windows\Temp\phpBBB.tmp" //临时目录
// ["error"]=>
// int(0)
// ["size"]=>
// int(560586)
// } echo $avator['error'];
//
// 上传失败时,$avator['error'] = 4
// echo $avator['error'];
// UPLOAD_ERR_OK === 0
if ($avator['error'] !== UPLOAD_ERR_OK) {
// 服务端没有接收到上传的文件
$GLOBALS['message'] = '上传失败';
return;
} // 接收到了文件
// 将文件从临时目录移动到网站根目录
$source_file = $avator["tmp_name"]; //源文件
// 移动的目录路劲中文件夹必须先存在,否则报错
$target_file = 'uploadFile/' . $avator["name"];//目标放在哪里
$moved = move_uploaded_file($source_file, $target_file); if (!$moved) {
$GLOBALS['message'] = '上传失败';
return;
} // 移动成功(上传成功)
echo '亲,上传成功了哟!';
} if ($_SERVER['REQUEST_METHOD'] === 'POST') {
upload();
} ?>
服务端php之文件上传的更多相关文章
- Node.js:上传文件,服务端如何获取文件上传进度
内容概述 multer是常用的Express文件上传中间件.服务端如何获取文件上传的进度,是使用的过程中,很常见的一个问题.在SF上也有同学问了类似问题<nodejs multer有没有查看文件 ...
- web服务端安全之文件上传漏洞
一.文件上传漏洞的原理 由于程序代码未对用户提交的文件进行严格的分析和检查,导致攻击者可以上传可执行的代码文件,从而获取web应用的控制权限. 常见于上传功能,富文本编辑器. 二.文件上传漏洞的防御 ...
- MVC文件上传05-使用客户端jQuery-File-Upload插件和服务端Backload组件自定义上传文件夹
在零配置情况下,文件的上传文件夹是根目录下的Files文件夹,如何自定义文件的上传文件夹呢? MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小 MVC文 ...
- C#开发BIMFACE系列4 服务端API之源上传文件
在注册成为BIMFACE的应用开发者后,要能在浏览器里浏览你的模型或者获取你模型内的BIM数据, 首先需要把你的模型文件上传到BIMFACE.根据不同场景,BIMFACE提供了丰富的文件相关的接口. ...
- h5移动端实现图片文件上传
PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现. JS代码 ...
- springCloud 微服务通过minio实现文件上传和文件下载接口
直接上代码吧,好多文章的下载都写的不明不白的,让人理解错,气死了!! 文件上传功能 文件上传很简单,首先你得部署好minio,然后写好配置信息,我的是动态读取nacos上配置的yml @Autowir ...
- java Socket Tcp示例三则(服务端处理数据、上传文件)
示例一: package cn.itcast.net.p5.tcptest; import java.io.BufferedReader;import java.io.IOException;impo ...
- Vue上传通过“服务端签名后直传”上传文件到阿里云 报错 400 Bad Request
我报错的原因是 formData.append('file', file) 放在签名前面了 解决办法 formData.append('file', file) 一定在最后 /** * 上传文件到 o ...
- 移动端HTML5实现文件上传
PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现. 用的技术 ...
随机推荐
- (未完成)catalyst-system WriteUp(2019暑假CTF第一周reverse)
目录 预备学习--Linux实践:ELF文件格式分析 一.概述 二.分析ELF文件头(ELF header) 三.通过文件头找到section header table,理解其内容 四.通过secti ...
- Xamarin图表开发基础教程(6)OxyPlot框架
Xamarin图表开发基础教程(6)OxyPlot框架 Xamamin iOS中绘制线图OxyPlotiOSDemo [示例OxyPlotiOSDemo]下面将实现线图的显示.具体的操作步骤如下: ( ...
- NB-IoT物联网开发资料
OneNET(移动平台) https://open.iot.10086.cn/ NB-IoT套件提供了一种方便用户使用NB模组将设备连接到OneNET平台实现丰富NB-IoT应用的能力.平台为用户提供 ...
- accept 和 content-Type区别
accept表示 客服端(浏览器)支持的类型,也是希望服务器响应发送回来的的数据类型. 例如:Accept:text/xml; ,也就是希望服务器响应发送回来的是xml文本格式的内容 区别: 1.Ac ...
- Java之整数运算
Java的整数运算遵循四则运算规则,可以使用任意嵌套的小括号.四则运算规则和初等数学一致.例如: public class Main { public static void main(String[ ...
- 带CheckBox美化控件的表格全选
带CheckBox美化控件 <table class="positionTable commonListTable" id="positionTable" ...
- javaScript Es6数组与对象的实例方法
个人心得 我们在没有接触Es6方法之前,做一些算法之类的事情是就比较麻烦,在做的过程中也要考虑很多的问题,比较麻烦,而Es6的方法正是来方便我们在平常运用时能够将问题简便化,大大的减少我们的日常代码 ...
- 三、Spring的@Scope设置组件作用域
还是和上节一样,首先来看下配置类:MainConfig2 @Configuration 名 public class MainConfig2 { @Scope("singleton" ...
- string 与 int double 的转化
#include <iostream> #include <string> #include <sstream> using namespace std; int ...
- 切换 Python2 Python3
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-alternati ...