Blogger Information
Blog 62
fans 2
comment 1
visits 42249
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP 20 文件上传的基本配置(0730)
老黑
Original
593 people have browsed it

主要内容:

  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 文件写入失败

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post