博客列表 >PHP 20 文件上传的基本配置(0730)

PHP 20 文件上传的基本配置(0730)

老黑
老黑原创
2020年08月01日 07:45:11597浏览

主要内容:

  1. 做上传表单
  2. 检查文件是否被上传
  3. 检查是否通过POST方式上传
  4. 检查文件类型
  5. 检查文件大小(包括怎么去设置)

1. 基本准备工作

  1. <?php
  2. // 看php.ini,查到一些基本信息。
  3. phpinfo();

  • 用的一个基本函数
  1. // $_FILES: 文件上传变量,超全局的变量数组, 保存着所有与文件上传的相关信息
  2. printf('<pre>%s</pre>', print_r($_FILES, true));
  3. // 是一个二维数组

  • 上传的页面,用post方法。
  1. <?php
  2. // $_FILES: 文件上传变量,超全局的变量数组, 保存着所有与文件上传的相关信息
  3. printf('<pre>%s</pre>', print_r($_FILES, true));
  4. ?>
  5. <!DOCTYPE html>
  6. <html lang="en">
  7. <head>
  8. <meta charset="UTF-8">
  9. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  10. <title>文件上传</title>
  11. </head>
  12. <body>
  13. <!-- 上传文件表单的属性设置:
  14. methods="POST"
  15. enctype="multipart/form-data" -->
  16. <form action="" method="POST" enctype="multipart/form-data">
  17. <fieldset>
  18. <legend>单文件上传</legend>
  19. <!-- 前端设置上传文件的大小:字节 -->
  20. <!-- <input type="hidden" name="MAX_FILE_SIZE" value=" 380"> -->
  21. <input type="file" name="my_pic" id="">
  22. <button>上传</button>
  23. </fieldset>
  24. </form>
  25. </body>
  26. </html>

2. 文件上传前检查是否有文件被上传

  1. <?php
  2. // $_FILES: 文件上传变量,超全局的变量数组, 保存着所有与文件上传的相关信息
  3. printf('<pre>%s</pre>', print_r($_FILES, true));
  4. // 1. 获取上传错误的代码
  5. $errorCode = $_FILES['my_pic']['error'] ?? null;
  6. // 以html中的那么作为一级数组的key,取中间的'error'key的值。
  7. // 2. 判断
  8. if ($errorCode === 4) echo '<p>没有文件上传</p>';

具体如图:

3. 检查文件是否通过POST方式上传

  • 将文件正式从临时目录移动到正式目录之前检查文件是否是通过POST方式上传的
  1. <?php
  2. error_reporting(E_ALL);
  3. // 判断: 1. 临时文件名, 2 . is_uploaded_file()
  4. // 1. 原始文件名
  5. $origianlFileName = $_FILES['my_pic']['name'] ?? null;
  6. // 2. 临时文件名
  7. $tmplFileName = $_FILES['my_pic']['tmp_name'] ?? null;
  8. // 首先临时文件是存在的,并且必须是通过POST上传的
  9. if ($tmplFileName && is_uploaded_file($tmplFileName)) echo '<p>'. $tmplFileName .' :上传方式正确</p>';
  10. else echo '上传类型错误';

4. 检查文件类型

  1. // 获取文件类型
  2. $fileType = $_FILES['my_pic']['type'] ?? null;
  3. // jpg,png,gif
  4. // image/png: MIME(卖母)类型
  5. // image/jpeg
  6. // image/gif....
  7. // echo strstr($fileType, '/'); // "/png"
  8. // echo '<br>';
  9. $type = strstr($fileType, '/', true); // "image"
  10. if ($type !== 'image') echo '文件类型错误: 不是有效的图片格式';

5. 检查文件大小

  1. // 查看php.ini中的关于上传文件大小的配置项
  2. // echo ini_get('upload_max_filesize');
  3. // 1. 获取上传错误的代码
  4. $errorCode = $_FILES['my_pic']['error'] ?? null;
  5. // 2. 判断
  6. // $errorCode === 1: 超过了php.ini中的大小设置
  7. // $errorCode === 2: 超过了前端上传表单中的大小的设置
  8. switch ($errorCode) {
  9. case 1:
  10. echo '超过了php.ini中的大小设置';
  11. break;
  12. case 2:
  13. echo '超过了前端上传表单中的大小的设置';
  14. break;
  15. }

6. 老师整理的一些基本信息

6-1. php 关于文件上传的配置

文件上传项目项在php.ini中设置,常用的配置项有:

序号 配置项 默认值 描述
1 file_uploads On 使 PHP 支持文件上传
2 upload_tmp_dir /tmp 指示应该临时把上传的文件存储在什么位置
3 max_file_uploads 20 单次请求时允许上传的最大文件数量
4 max_execution_time 30 设置 PHP 最长执行时间(秒)
5 max_input_time 60 设置 PHP 通过 POST/GET/PUT 接收数据的时长(秒)
6 memory_limit 128M 系统分配给当前脚本执行可用的最大内存容量
7 post_max_size 8M 允许的 POST 数据的总大小(以字节为单位)
8 upload_max_filesize 32M 允许的尽可能最大的文件上传(以字节为单位)

6-2. $_FILE

  • 上传文件的描述信息,全部保存在系统全局变量$_FILES
  • $_FILES以二维数组形式保存: $_FILES['form_file_name']['key']
  • 'form_file_name': 对应着表单中<input type="file" name="my_pic">name属性值
  • 'key': 共有 5 个键名, 描述如下:
序号 键名 描述
1 name 文件在客户端的原始文件名(即存在用户电脑上的文件名)
2 type 文件的 MIME 类型, 由浏览器提供, PHP 并不检查它
3 tmp_name 文件被上传到服务器上之后,在临时目录中临时文件名
4 error 和该文件上传相关的错误代码
5 size 已上传文件的大小(单位为字节)
  • error文件上传错误信息描述
序号 常量 描述
1 UPLOAD_ERR_OK 0 没有错误发生,文件上传成功
2 UPLOAD_ERR_INI_SIZE 1 文件超过php.iniupload_max_filesize
3 UPLOAD_ERR_FORM_SIZE 2 文件大小超过表单中MAX_FILE_SIZE指定的值
4 UPLOAD_ERR_PARTIAL 3 文件只有部分被上传
5 UPLOAD_ERR_NO_FILE 4 没有文件被上传
6 UPLOAD_ERR_NO_TMP_DIR 6 找不到临时文件夹
7 UPLOAD_ERR_CANT_WRITE 7 文件写入失败

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议