Blogger Information
Blog 13
fans 1
comment 0
visits 8285
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0511文件上传
扬美刘
Original
626 people have browsed it

1)单独上传一个图片文件

简单地上传一个文件,做简单的判断

  1. <?php
  2. // phpinfo();
  3. // 查看上传的值
  4. // printf('<pre>%s</pre>', print_r($_FILES, true));
  5. // 查看系统对文件大小的限制
  6. // echo '文件限制:'.ini_get('upload_max_filesize');
  7. // 取得文件的参数,把参数简化一点;
  8. $a=$_FILES['upfile'];
  9. // printf('<pre>%s</pre>', print_r($a, true));
  10. // 1)判断文件已上传
  11. if ($a['error'] !==0) echo '没有文件上传;';
  12. // 2)判断文件大小
  13. switch ($a['error']){
  14. case 1:
  15. echo '文件超过指定的大小:'.ini_get('upload_max_filesize');
  16. break;
  17. case 2:
  18. echo '文件超过表单要求的大小';
  19. break;
  20. default:
  21. // echo '文件符合要求的大小';
  22. }
  23. // 3)判断文件格式是图片
  24. if (strstr($a['type'],'/',true) !=='image') echo '文件不是图片;';
  25. // 4) 判断是不是post上来的;
  26. if (!is_uploaded_file($a['tmp_name'])) die('上传方式合法');
  27. // 5) 把临时文件移到目标文件夹中,并重新生成文件名称
  28. $targetfilename='../upload/'.md5(time().mt_rand(1,1000)).strstr($a['name'], '.');
  29. if (move_uploaded_file($a['tmp_name'],$targetfilename )) {
  30. // 6)预览一下图片
  31. echo '<p>'.$a['name'].' : 上传成功~~</p>';
  32. echo "<img src='{$targetfilename}' width='200'>";
  33. }
  34. ?>
  35. <!DOCTYPE html>
  36. <html lang="en">
  37. <head>
  38. <meta charset="UTF-8">
  39. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  40. <title>Document</title>
  41. </head>
  42. <body>
  43. <form action="" method="post" enctype="multipart/form-data">
  44. <fieldset>
  45. <legend>文件上传</legend>
  46. <input name="upfile" type="file">
  47. <button>上传</button>
  48. </fieldset>
  49. </form>
  50. </body>
  51. </html>

2) 自定义异常类的独个文件上传

在上面的基础上,加入自定义异常数判断,让代码更加完整

  1. <?php
  2. // $_FILES
  3. $a=$_FILES['upfile'];
  4. // printf('<pre>%s</pre>', print_r($a, true));
  5. // 自定义上传异常类
  6. class UploadException extends Exception
  7. {
  8. public function __toString()
  9. {
  10. return <<< UPLOAD
  11. <ul>文件上传出错信息:
  12. <li>代码:$this->code</li>
  13. <li>信息:$this->message</li>
  14. <li>文件:$this->file</li>
  15. <li>行号:$this->line</li>
  16. </ul>
  17. UPLOAD;
  18. }
  19. }
  20. try {
  21. // 上传出错的代码
  22. $errorCode = $a['error'];
  23. if ($errorCode > 0) {
  24. switch ($errorCode) {
  25. case 1:
  26. throw new UploadException('上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值', 1);
  27. break;
  28. case 2:
  29. throw new UploadException('上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值', 2);
  30. break;
  31. case 3:
  32. throw new UploadException('文件只有部分被上传', 3);
  33. break;
  34. case 4:
  35. throw new UploadException('没有文件被上传', 4);
  36. break;
  37. case 5:
  38. throw new UploadException('找不到临时文件夹', 6);
  39. break;
  40. case 7:
  41. throw new UploadException('文件写入失败', 7);
  42. break;
  43. default:
  44. throw new UploadException('未知类型错误', 8);
  45. }
  46. }
  47. else{
  48. // 判断文件类型
  49. if (strstr($a['type'], '/', true) !== 'image') {throw new UploadException('文件类型错误', 9);}
  50. // 判断是不是post上来的;
  51. if (!is_uploaded_file($a['tmp_name'])) {throw new UploadException('请从表单上提交', 10);}
  52. }
  53. }
  54. catch (UploadException $e) {
  55. echo $e;
  56. }
  57. // 如果没报错,就称动文件
  58. if (!$e)
  59. { // 将文件从临时目录 移动到用户自定义的目标目录中
  60. if (is_uploaded_file($a['tmp_name'])) {
  61. $destFileName = '../upload/'.md5(time().mt_rand(1, 1000)).strstr($a['name'], '.');
  62. // 移动文件到目标目录使用的函数
  63. if (move_uploaded_file($a['tmp_name'], $destFileName)) {
  64. echo "<p>{$a['name']}: 上传成功~~</p>";
  65. echo "<img src='{$destFileName}' width='200'>";
  66. }
  67. }
  68. }
  69. ?>
  70. <!DOCTYPE html>
  71. <html lang="en">
  72. <head>
  73. <meta charset="UTF-8">
  74. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  75. <title>Document</title>
  76. </head>
  77. <body>
  78. <form action="" method="post" enctype="multipart/form-data">
  79. <fieldset>
  80. <legend>文件上传</legend>
  81. <input name="upfile" type="file">
  82. <input type="hidden" name="MAX_FILE_SIZE" value="500000">
  83. <button>上传</button>
  84. </fieldset>
  85. </form>
  86. </body>
  87. </html>

3) 多个文件上传

  1. <?php
  2. // $_FILES
  3. $a=$_FILES['upfiles'];
  4. // printf('<pre>%s</pre>', print_r( $a, true));
  5. if ($a){
  6. foreach ($a['error'] as $key => $error) {
  7. // 只要判断 error === 0 ,即就是有上传的
  8. if ($error === 0) {
  9. // 目标文件名,重新命名
  10. if (is_uploaded_file($a['tmp_name'][$key])) {
  11. $destFileName = '../upload/'.md5(time().mt_rand(1, 1000)).strstr($a['name'][$key], '.');
  12. // 移动文件,如果是图片就移动,不是图片不移动
  13. if (strstr($a['type'][$key], '/', true) === 'image') {
  14. move_uploaded_file($a['tmp_name'][$key], $destFileName);
  15. echo "<div>图片{$a['name'][$key]}上传成功:<img src='{$destFileName}' width='50'></div>";
  16. } else {
  17. echo "<div>文件{$a['name'][$key]}不是图片,上传不成功</div>";
  18. }
  19. }
  20. }
  21. else
  22. {
  23. echo "<div>文件{$a['name'][$key]}上传不成功</div>";
  24. }
  25. }
  26. }
  27. ?>
  28. <!DOCTYPE html>
  29. <html lang="en">
  30. <head>
  31. <meta charset="UTF-8">
  32. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  33. <title>Document</title>
  34. </head>
  35. <body>
  36. <form action="" method="post" enctype="multipart/form-data">
  37. <fieldset>
  38. <legend>文件上传</legend>
  39. <input type="file" name="upfiles[]" multiple>
  40. <input type="hidden" name="MAX_FILE_SIZE" value="500000">
  41. <button>上传</button>
  42. </fieldset>
  43. </form>
  44. </body>
  45. </html>

4 总结

  • 1) 文件上传在form里,method要用post;要enctype=”multipart/form-data”;
  • 2) 如果是上传一个文件,input的type=file;如果要多个文件,name要是数组,且要设为multiple;
  • 3) 上传提交后,单个文件的得到的是二维数据,多个文件的,得到的是三维数组;可以简化成一维和二维数据;
  • 4) 上传文件是危险的动作,需要对文件进行多方面的判断,如格式、大小等;
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:对于服务器来说, 用户的任何操作都是不可信任的, 必须要过滤, 特别是商业项目中
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