亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 29
粉絲 0
評論 0
訪問量 35539
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
PHP基礎:單文件上傳、多文件上傳、批量上傳
暴宇
原創(chuàng)
2037人瀏覽過

PHP基礎:單文件上傳、多文件上傳、批量上傳

1.單文件上傳

  1. // 自定義上傳異常類
  2. class UploadException extends Exception
  3. {
  4. // 在異常子類中,可以訪問并重寫Exception中的四個屬性,通過__toString()格式化異常輸出信息
  5. public function __toString()
  6. {
  7. return <<< UPLOAD
  8. <style>
  9. table {border-collapse: collapse;border:1px solid black;text-align: center;}
  10. td {border:1px solid black;padding: 5px;}
  11. tr:first-of-type {background-color:#eee;}
  12. tr:last-of-type td {color: coral;}
  13. </style>
  14. <table>
  15. <tr><td>代碼</td><td>信息</td><td>文件</td><td>行號</td></tr>
  16. <tr><td>$this->code</td><td>$this->message</td><td>$this->file</td><td>$this->line</td></tr>
  17. </table>
  18. UPLOAD;
  19. }
  20. }
  21. ///////////////////////////////////////////////////////////////////////
  22. try {
  23. // 上傳出錯的代碼
  24. $errorCode = $_FILES['my_pic']['error'];
  25. if ($errorCode > UPLOAD_ERR_OK) {
  26. switch ($errorCode) {
  27. case UPLOAD_ERR_INI_SIZE:
  28. throw new UploadException('上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值', 1);
  29. break;
  30. case UPLOAD_ERR_FORM_SIZE:
  31. throw new UploadException('上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值', 2);
  32. break;
  33. case UPLOAD_ERR_PARTIAL:
  34. throw new UploadException('文件只有部分被上傳', 3);
  35. break;
  36. case UPLOAD_ERR_NO_FILE:
  37. throw new UploadException('沒有文件被上傳', 4);
  38. break;
  39. case UPLOAD_ERR_NO_TMP_DIR:
  40. throw new UploadException('找不到臨時文件夾', 6);
  41. break;
  42. case UPLOAD_ERR_CANT_WRITE:
  43. throw new UploadException('文件寫入失敗', 7);
  44. break;
  45. default:
  46. // 測試時建議關掉default: 避免誤報影響
  47. throw new UploadException('未知類型錯誤', 8);
  48. }
  49. }
  50. // 判斷文件類型
  51. $fileType = $_FILES['my_pic']['type'];
  52. if (strstr($fileType, '/', true) !== 'image') throw new UploadException('文件類型錯誤',9);
  53. // 將文件從臨時目錄 移動到用戶自定義的目標目錄中
  54. // 臨時文件名
  55. $tempFileName = $_FILES['my_pic']['tmp_name'];
  56. if (is_uploaded_file($tempFileName)) {
  57. // 原始文件名
  58. $originalFileName = $_FILES['my_pic']['name'];
  59. // 目錄文件名
  60. $destFileName = 'uploads/'.md5(time().mt_rand(1,1000)).strstr($originalFileName, '.');
  61. // 移動文件到目標目錄使用的函數(shù)
  62. if (move_uploaded_file($tempFileName, $destFileName)) {
  63. echo "<p>$originalFileName: 上傳成功~~</p>";
  64. // 預覽
  65. echo "<img src='{$destFileName}' width='200'>";
  66. }
  67. }
  68. } catch (UploadException $e) {
  69. echo $e;
  70. }
  71. ?>
  72. <!DOCTYPE html>
  73. <html lang="en">
  74. <head>
  75. <meta charset="UTF-8">
  76. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  77. <title>文件上傳變量$_FILES</title>
  78. </head>
  79. <body>
  80. <hr>
  81. <form action="" method="POST" enctype="multipart/form-data">
  82. <fieldset>
  83. <legend>單文件上傳: 異常處理</legend>
  84. <input type="hidden" name="MAX_FILE_SIZE" value="3000000">
  85. <input type="file" name="my_pic">
  86. <button>上傳</button>
  87. </fieldset>
  88. </form>
  89. </body>
  90. </html>

上傳成功運行效果:

上傳錯誤運行效果:

2.多文件上傳

  1. <?php
  2. class UploadException extends Exception
  3. {
  4. // 在異常子類中,可以訪問并重寫Exception中的四個屬性,通過__toString()格式化異常輸出信息
  5. public function __toString()
  6. {
  7. return <<< UPLOAD
  8. <style>
  9. table {border-collapse: collapse;border:1px solid black;text-align: center;}
  10. td {border:1px solid black;padding: 5px;}
  11. tr:first-of-type {background-color:#eee;}
  12. tr:last-of-type td {color: coral;}
  13. </style>
  14. <table>
  15. <tr><td>代碼</td><td>信息</td><td>文件</td><td>行號</td></tr>
  16. <tr><td>$this->code</td><td>$this->message</td><td>$this->file</td><td>$this->line</td></tr>
  17. </table>
  18. UPLOAD;
  19. }
  20. }
  21. try {
  22. foreach ($_FILES as $file) {
  23. // 上傳出錯的代碼
  24. $errorCode = $file['error'];
  25. if ($errorCode > UPLOAD_ERR_OK) {
  26. switch ($errorCode) {
  27. case UPLOAD_ERR_INI_SIZE:
  28. throw new UploadException('上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值', 1);
  29. break;
  30. case UPLOAD_ERR_FORM_SIZE:
  31. throw new UploadException('上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值', 2);
  32. break;
  33. case UPLOAD_ERR_PARTIAL:
  34. throw new UploadException('文件只有部分被上傳', 3);
  35. break;
  36. case UPLOAD_ERR_NO_FILE:
  37. throw new UploadException('沒有文件被上傳', 4);
  38. break;
  39. case UPLOAD_ERR_NO_TMP_DIR:
  40. throw new UploadException('找不到臨時文件夾', 6);
  41. break;
  42. case UPLOAD_ERR_CANT_WRITE:
  43. throw new UploadException('文件寫入失敗', 7);
  44. break;
  45. default:
  46. // 測試時建議關掉default: 避免誤報影響
  47. throw new UploadException('未知類型錯誤', 8);
  48. }
  49. }
  50. // 只要判斷 error === 0
  51. if ($file['error'] === 0) {
  52. // 判斷文件類型
  53. // print_r($file) ;
  54. $fileType = $file['type'];
  55. if (strstr($fileType, '/', true) !== 'image') throw new UploadException('文件類型錯誤',9);
  56. $tempFileName = $file['tmp_name'];
  57. if (is_uploaded_file($tempFileName)) {
  58. // 原始文件名
  59. $originalFileName = $file['name'];
  60. // 目錄文件名
  61. $destFileName = 'uploads/'.md5(time().mt_rand(1,1000)).strstr($originalFileName, '.');
  62. // 移動文件到目標目錄使用的函數(shù)
  63. if (move_uploaded_file($tempFileName, $destFileName)) {
  64. echo "<p>$originalFileName: 上傳成功~~</p>";
  65. // 預覽
  66. echo "<img src='{$destFileName}' width='200'>";
  67. }
  68. }
  69. }
  70. }
  71. } catch (UploadException $e) {
  72. echo $e;
  73. }
  74. ?>
  75. <!DOCTYPE html>
  76. <html lang="en">
  77. <head>
  78. <meta charset="UTF-8">
  79. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  80. <title>文件上傳變量$_FILES</title>
  81. </head>
  82. <body>
  83. <hr>
  84. <form action="" method="POST" enctype="multipart/form-data">
  85. <fieldset>
  86. <legend>多文件上傳: 逐個上傳(一)</legend>
  87. <input type="hidden" name="MAX_FILE_SIZE" value="3000000">
  88. <input type="file" name="my_pic1">
  89. <input type="file" name="my_pic2">
  90. <input type="file" name="my_pic3">
  91. <button>上傳</button>
  92. </fieldset>
  93. </form>
  94. </body>
  95. </html>

多文件上傳成功運行效果:

多文件上傳錯誤運行效果:

3.多文件批量上傳

  1. <?php
  2. class UploadException extends Exception
  3. {
  4. // 在異常子類中,可以訪問并重寫Exception中的四個屬性,通過__toString()格式化異常輸出信息
  5. public function __toString()
  6. {
  7. return <<< UPLOAD
  8. <style>
  9. table {border-collapse: collapse;border:1px solid black;text-align: center;}
  10. td {border:1px solid black;padding: 5px;}
  11. tr:first-of-type {background-color:#eee;}
  12. tr:last-of-type td {color: coral;}
  13. </style>
  14. <table>
  15. <tr><td>代碼</td><td>信息</td><td>文件</td><td>行號</td></tr>
  16. <tr><td>$this->code</td><td>$this->message</td><td>$this->file</td><td>$this->line</td></tr>
  17. </table>
  18. UPLOAD;
  19. }
  20. }
  21. try {
  22. if ($_FILES['my_pic'])
  23. // print_r($_FILES['my_pic']);
  24. foreach ($_FILES['my_pic']['error'] as $key => $error) {
  25. // 只要判斷 error === 0
  26. // 上傳出錯的代碼
  27. $errorCode=$_FILES['my_pic']['error'][$key];
  28. if ($error === UPLOAD_ERR_OK) {
  29. // 臨時文件名
  30. $tmpFileName = $_FILES['my_pic']['tmp_name'][$key];
  31. // 原始文件名
  32. $originalFileName = $_FILES['my_pic']['name'][$key];
  33. // 目標文件名
  34. $destFileName = 'uploads/'. $originalFileName;
  35. // 移動文件
  36. move_uploaded_file($tmpFileName, $destFileName);
  37. // 預覽
  38. echo "<img src='{$destFileName}' width='200'>";
  39. }else{
  40. switch ($error) {
  41. case UPLOAD_ERR_INI_SIZE:
  42. throw new UploadException('上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值', 1);
  43. break;
  44. case UPLOAD_ERR_FORM_SIZE:
  45. throw new UploadException('上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值', 2);
  46. break;
  47. case UPLOAD_ERR_PARTIAL:
  48. throw new UploadException('文件只有部分被上傳', 3);
  49. break;
  50. case UPLOAD_ERR_NO_FILE:
  51. throw new UploadException('沒有文件被上傳', 4);
  52. break;
  53. case UPLOAD_ERR_NO_TMP_DIR:
  54. throw new UploadException('找不到臨時文件夾', 6);
  55. break;
  56. case UPLOAD_ERR_CANT_WRITE:
  57. throw new UploadException('文件寫入失敗', 7);
  58. break;
  59. default:
  60. // 測試時建議關掉default: 避免誤報影響
  61. // throw new UploadException('未知類型錯誤', 8);
  62. }
  63. }
  64. // if ($errorCode > UPLOAD_ERR_OK) {
  65. // switch ($errorCode) {
  66. // case UPLOAD_ERR_INI_SIZE:
  67. // throw new UploadException('上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值', 1);
  68. // break;
  69. // case UPLOAD_ERR_FORM_SIZE:
  70. // throw new UploadException('上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值', 2);
  71. // break;
  72. // case UPLOAD_ERR_PARTIAL:
  73. // throw new UploadException('文件只有部分被上傳', 3);
  74. // break;
  75. // case UPLOAD_ERR_NO_FILE:
  76. // throw new UploadException('沒有文件被上傳', 4);
  77. // break;
  78. // case UPLOAD_ERR_NO_TMP_DIR:
  79. // throw new UploadException('找不到臨時文件夾', 6);
  80. // break;
  81. // case UPLOAD_ERR_CANT_WRITE:
  82. // throw new UploadException('文件寫入失敗', 7);
  83. // break;
  84. // default:
  85. // // 測試時建議關掉default: 避免誤報影響
  86. // // throw new UploadException('未知類型錯誤', 8);
  87. // }
  88. // }else{
  89. // }
  90. // if ($error === UPLOAD_ERR_OK) {
  91. // // 臨時文件名
  92. // $tmpFileName = $_FILES['my_pic']['tmp_name'][$key];
  93. // // 原始文件名
  94. // $originalFileName = $_FILES['my_pic']['name'][$key];
  95. // // 目標文件名
  96. // $destFileName = 'uploads/'. $originalFileName;
  97. // // 移動文件
  98. // move_uploaded_file($tmpFileName, $destFileName);
  99. // // 預覽
  100. // echo "<img src='{$destFileName}' width='200'>";
  101. // }
  102. }
  103. } catch (UploadException $e) {
  104. echo $e;
  105. }
  106. ?>
  107. <!DOCTYPE html>
  108. <html lang="en">
  109. <head>
  110. <meta charset="UTF-8">
  111. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  112. <title>文件上傳變量$_FILES</title>
  113. </head>
  114. <body>
  115. <hr>
  116. <form action="" method="POST" enctype="multipart/form-data">
  117. <fieldset>
  118. <legend>多文件上傳: 批量上傳</legend>
  119. <input type="hidden" name="MAX_FILE_SIZE" value="3000000">
  120. <!-- 將name屬性值能數(shù)組的形式提供 -->
  121. <input type="file" name="my_pic[]" multiple>
  122. <button>上傳</button>
  123. </fieldset>
  124. </form>
  125. </body>
  126. </html>

多文件批量上傳成功運行效果:

多文件批量上傳錯誤運行效果:

總結

1.文件的上傳流程

選擇文件->上傳到臨時目錄->轉存到指定目錄->反饋是否上傳成功

2.文件的上傳限制

限制文件大小、限制文件類型、限制上傳方式、限制上傳數(shù)量等等,主要是保證服務器的安全及正常運行

3.文件上傳的錯誤處理

目的是根據(jù)錯誤代號友好的反饋給用戶

批改老師:天蓬老師天蓬老師

批改狀態(tài):合格

老師批語:非常完整, 認真
本博文版權歸博主所有,轉載請注明地址!如有侵權、違法,請聯(lián)系admin@php.cn舉報處理!
全部評論 文明上網(wǎng)理性發(fā)言,請遵守新聞評論服務協(xié)議
0條評論
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學習!
    全站2000+教程免費學