知识点

  • 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之文件上传的更多相关文章

  1. Node.js:上传文件,服务端如何获取文件上传进度

    内容概述 multer是常用的Express文件上传中间件.服务端如何获取文件上传的进度,是使用的过程中,很常见的一个问题.在SF上也有同学问了类似问题<nodejs multer有没有查看文件 ...

  2. web服务端安全之文件上传漏洞

    一.文件上传漏洞的原理 由于程序代码未对用户提交的文件进行严格的分析和检查,导致攻击者可以上传可执行的代码文件,从而获取web应用的控制权限. 常见于上传功能,富文本编辑器. 二.文件上传漏洞的防御 ...

  3. MVC文件上传05-使用客户端jQuery-File-Upload插件和服务端Backload组件自定义上传文件夹

    在零配置情况下,文件的上传文件夹是根目录下的Files文件夹,如何自定义文件的上传文件夹呢? MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小  MVC文 ...

  4. C#开发BIMFACE系列4 服务端API之源上传文件

    在注册成为BIMFACE的应用开发者后,要能在浏览器里浏览你的模型或者获取你模型内的BIM数据, 首先需要把你的模型文件上传到BIMFACE.根据不同场景,BIMFACE提供了丰富的文件相关的接口. ...

  5. h5移动端实现图片文件上传

    PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现. JS代码 ...

  6. springCloud 微服务通过minio实现文件上传和文件下载接口

    直接上代码吧,好多文章的下载都写的不明不白的,让人理解错,气死了!! 文件上传功能 文件上传很简单,首先你得部署好minio,然后写好配置信息,我的是动态读取nacos上配置的yml @Autowir ...

  7. java Socket Tcp示例三则(服务端处理数据、上传文件)

    示例一: package cn.itcast.net.p5.tcptest; import java.io.BufferedReader;import java.io.IOException;impo ...

  8. Vue上传通过“服务端签名后直传”上传文件到阿里云 报错 400 Bad Request

    我报错的原因是 formData.append('file', file) 放在签名前面了 解决办法 formData.append('file', file) 一定在最后 /** * 上传文件到 o ...

  9. 移动端HTML5实现文件上传

    PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现. 用的技术 ...

随机推荐

  1. 刷题记录:[网鼎杯]Fakebook

    目录 刷题记录:[网鼎杯]Fakebook 一.涉及知识点 1.敏感文件泄露 2.sql注入 二.解题方法 刷题记录:[网鼎杯]Fakebook 题目复现链接:https://buuoj.cn/cha ...

  2. 大数据应用期末总评——Hadoop综合大作业

    作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 Hadoop综合大作业 要求: 1.将爬虫大作业产生的csv文件 ...

  3. 【Tensorflow】tf.nn.depthwise_conv2d如何实现深度卷积?

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/mao_xiao_feng/article/ ...

  4. 蓝绿部署、A/B测试以及灰度发布(金丝雀发布)

    过去的10多年里,很多大公司都在使用蓝绿部署,安全.可靠是这种部署方式的特点.蓝绿部署虽然算不上”Sliver Bullet“,但确实很实用.在有关于“微服务”.“DevOps”.“Cloud-nat ...

  5. c# 通过json.net中的JsonConverter进行自定义序列化与反序列化

    https://www.cnblogs.com/yijiayi/p/10051284.html 相信大家在工作中会经常遇见对json进行序列化与反序列化吧,但通常的序列化与反序列化中的json结构与c ...

  6. PostgreSQL中的partition-wise join

    与基于继承的分区(inheritance-based partitioning)不同,PostgreSQL 10中引入的声明式分区对数据如何划分没有任何影响.PostgreSQL 11的查询优化器正准 ...

  7. swoole流程图

    程图,便于以后回忆下 总结几点如下: 首先主进程监听pipe_master事件, 子进程监听pipe_worker事件 通过主进程派生的线程 swReactorThread *thread = swS ...

  8. SpringBoot入门-概念(一)

    SpringBoot是什么 Spring boot是一个构建在Spring框架之上.以一种更加简单快捷的方式来配置和运行web应用程序的开源框架. 为什么用SpringBoot 可以解决普通的java ...

  9. Hadoop记录-Apache hadoop+spark集群部署

    Hadoop+Spark集群部署指南 (多节点文件分发.集群操作建议salt/ansible) 1.集群规划节点名称 主机名 IP地址 操作系统Master centos1 192.168.0.1 C ...

  10. [LeetCode] 163. Missing Ranges 缺失区间

    Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, up ...