PHP文件上传的处理方法

PHP文件上传配置文件


序号配置项默认值描述
1file_uploadsOn使 PHP 支持文件上传
2upload_tmp_dir/tmp指示应该临时把上传的文件存储在什么位置
3max_file_uploads20单次请求时允许上传的最大文件数量
4max_execution_time30设置脚本被解析器终止之前PHP最长执行时间(秒) ,防止服务器资源被耗尽
5max_input_time60设置 PHP 通过 POST/GET/PUT 解析接收数据的时长(秒)
6memory_limit128M系统分配给当前脚本执行可用的最大内存容量
7post_max_size8M允许的 POST 数据的总大小
8upload_max_filesize32M允许的尽可能最大的文件上传

上传文件的描述信息,全部保存在系统全局变量$_FILES中$_FILES以二维数组形式保存:$_FILES[‘form_file_name’][‘key’];

form_file_name: 对应着表单中<input type="file" name="my_pic">中name属性值

key:共有 5 个键名, 描述如下:

  • name :文件在客户端的原始文件名(即存在用户电脑上的文件名);
  • type: 文件的 MIME 类型, 由浏览器提供, PHP 并不检查它;
  • tmp_name: 文件被上传到服务器上之后,在临时目录中临时文件名;
  • error : 和该文件上传相关的错误代码;
  • size : 已上传文件的大小(单位为字);

处理文件上传方式

  1. <?php
  2. printf('<pre>%s</pre>',print_r($_FILES,true));
  3. $tmpFileName = $_FILES['my_pic']['tmp_name'];
  4. $originalFileName = $_FILES['my_pic']['name'];
  5. if(is_uploaded_file($tmpFileName))
  6. echo "{$originalFileName}:上传方式合法";
  7. ?>
  8. <!DOCTYPE html>
  9. <html lang="en">
  10. <head>
  11. <meta charset="UTF-8">
  12. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  13. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  14. <title>文件上传变量$_FILES</title>
  15. </head>
  16. <body>
  17. <!-- <form action="" method="post" enctype="application/x-www-form-urlencoded"> -->
  18. <form action="" method="post" enctype="multipart/form-data">
  19. <fieldset>
  20. <legend>单文件上传</legend>
  21. <input type="file" name="my_pic">
  22. <button>上传</button>
  23. </fieldset>
  24. </form>
  25. </body>
  26. </html>

PHP 文件上传的错误类型

文件上传错误信息描述

序号常量描述
1UPLOAD_ERR_OK0没有错误发生,文件上传成功
2UPLOAD_ERR_INI_SIZE1文件超过php.iniupload_max_filesize
3UPLOAD_ERR_FORM_SIZE2文件大小超过表单中MAX_FILE_SIZE指定的值
4UPLOAD_ERR_PARTIAL3文件只有部分被上传
5UPLOAD_ERR_NO_FILE4没有文件被上传
6UPLOAD_ERR_NO_TMP_DIR6找不到临时文件夹
7UPLOAD_ERR_CANT_WRITE7文件写入失败

根据上传文件的错误类型判断

  1. <?php
  2. printf('<pre>%s</pre>',print_r($_FILES,true));
  3. $errorCode = $_FILES['my_pic']['error'];
  4. if($errorCode ===4 ) echo '没有文件上传';
  5. //两种方式检查
  6. //if(empty($_FILES['my_pic']['name'])) echo '没有文件传';
  7. ?>
  8. <!DOCTYPE html>
  9. <html lang="en">
  10. <head>
  11. <meta charset="UTF-8">
  12. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  13. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  14. <title>文件上传变量$_FILES</title>
  15. </head>
  16. <body>
  17. <!-- <form action="" method="post" enctype="application/x-www-form-urlencoded"> -->
  18. <form action="" method="post" enctype="multipart/form-data">
  19. <fieldset>
  20. <legend>单文件上传</legend>
  21. <input type="file" name="my_pic">
  22. <button>上传</button>
  23. </fieldset>
  24. </form>
  25. </body>
  26. </html>

处理文件类型是否符合要求 要求后缀是 ‘jpg’,’jpeg’,’png’,’wbmp’,’gif’

  1. <?php
  2. //$_FILES;
  3. printf('<pre>%s</pre>',print_r($_FILES,true));
  4. $fileType = $_FILES['my_pic']['type'];
  5. echo $fileType,'<br>';
  6. //print_r(explode('/',$fileType)[0]);
  7. echo strstr($fileType,'/',true);
  8. echo '<br>';
  9. $allow = ['jpg','jpeg','png','wbmp','gif'];
  10. $extension = pathinfo($_FILES['my_pic']['name'])['extension'];
  11. echo $extension;
  12. if(!in_array($extension,$allow)){echo '文件类型不正确';}
  13. else{
  14. echo '合法的文件类型';
  15. }
  16. //if(strstr($fileType,'/',true) !== 'image')
  17. //echo '<p>文件类型错误</p>';
  18. ?>
  19. <!DOCTYPE html>
  20. <html lang="en">
  21. <head>
  22. <meta charset="UTF-8">
  23. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  24. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  25. <title>文件上传变量$_FILES</title>
  26. </head>
  27. <body>
  28. <hr>
  29. <!-- <form action="" method="post" enctype="application/x-www-form-urlencoded"> -->
  30. <form action="" method="post" enctype="multipart/form-data">
  31. <fieldset>
  32. <legend>单文件上传:检测文件类型</legend>
  33. <input type="file" name="my_pic">
  34. <button>上传</button>
  35. </fieldset>
  36. </form>
  37. </body>
  38. </html>

检查文件上传内容不超过5M

用ini_get(‘uplond_max_filesize’)检测文件上传的最大值,将配置文件里的上传最大值改为5M;

  1. <?php
  2. printf('<pre>%s</pre>',print_r($_FILES,true));
  3. echo ini_get('upload_max_filesize');
  4. ini_set('upload_max_filesize','5M');
  5. ?>
  6. <!DOCTYPE html>
  7. <html lang="en">
  8. <head>
  9. <meta charset="UTF-8">
  10. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  11. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  12. <title>文件上传变量$_FILES</title>
  13. </head>
  14. <body>
  15. <!-- <form action="" method="post" enctype="application/x-www-form-urlencoded"> -->
  16. <form action="" method="post" enctype="multipart/form-data">
  17. <fieldset>
  18. <legend>单文件上传</legend>
  19. <input type="hidden" name="MAX_FILE_SIZE" value="5524880">
  20. <input type="file" name="my_pic">
  21. <button>上传</button>
  22. </fieldset>
  23. </form>
  24. </body>
  25. </html>

PHP文件上传,多文件上传:逐个上传

  1. <?php
  2. printf('<pre>%s</pre>',print_r($_FILES,true));
  3. foreach ($_FILES as $file) {
  4. if($file['error'] == 0)
  5. {
  6. $destFile = 'upload/'.$file['name'];
  7. move_uploaded_file($file['tmp_name'],$destFile);
  8. echo "<img src='{$destFile}' width ='150'>";
  9. }
  10. }
  11. ?>
  12. <!DOCTYPE html>
  13. <html lang="en">
  14. <head>
  15. <meta charset="UTF-8">
  16. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  17. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  18. <title>文件上传变量$_FILES</title>
  19. </head>
  20. <body>
  21. <!-- <form action="" method="post" enctype="application/x-www-form-urlencoded"> -->
  22. <form action="" method="post" enctype="multipart/form-data">
  23. <fieldset>
  24. <legend>多文件上传:逐个上传</legend>
  25. <input type="hidden" name="MAX_FILE_SIZE" value="5524880">
  26. <input type="file" name="my_pic1">
  27. <input type="file" name="my_pic2">
  28. <input type="file" name="my_pic3">
  29. <button>上传</button>
  30. </fieldset>
  31. </form>
  32. </body>
  33. </html>

更多相关文章

  1. 0820作业
  2. 命名空间自动加载进阶与mysql初体验
  3. PHP-02外部文件引入require与数组遍历
  4. oracle数据库无法打开修复过程
  5. 关于PHP递归函数以及处理多维数组和目录文件实例
  6. 完成一个用户注册页面, 用xmind文件中总结的字符串函数库,对表单
  7. gitignore的一些语法
  8. MVC-安装jQuery的npm和yarn的方法
  9. uniapp H5图片上传压缩自动旋转

随机推荐

  1. android SQLite中query的用法
  2. Android(安卓)自定义ScrollView 实现拉下
  3. Android 沉浸式statusbar (5.0以上无阴影,s
  4. Android(安卓)Tips
  5. [轉] android默认debug.keystore的密码
  6. Android系统自带样式(android:theme)(stephe
  7. RadioGroup实现底部导航
  8. Android:常见错误提示
  9. Android(安卓)判断Service是否开启
  10. 关于Android环境配置SDK的问题Failed to