細說文件上傳原理與實戰

文件上傳

1. 文件上傳配置

文件上傳項目項在php.ini中設置,經常使用的配置項有:javascript

序號 配置項 默認值 描述
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 容許的儘量最大的文件上傳(以字節爲單位)

$_FILES

  • 上傳文件的描述信息,所有保存在系統全局變量$_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 已上傳文件的大小(單位爲字節)
  • 文件上傳錯誤信息描述
序號 常量 描述
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 文件寫入失敗
  • 支持文件上傳的前端表單設置
序號 屬性設置 描述
1 <form method="POST"> 請求類型必須是POST
2 <form enctype="multipart/form-data"> 設置表單提交數據的編碼類型
3 <input type="file" name="uploads"> 設置表單控件類型與名稱以支持上傳
4 <input type="hidden" name="MAX_FILE_SIZE" value="..."> 設置隱藏域限制上傳文件大小(可選)
  • [擴展] enctype屬性說明

enctype: 設置表單數據,在發送到服務器以前的編碼規則php

序號 屬性值 描述
1 application/x-www-form-urlencoded 默認值, 發送前進行編碼,空格轉+,非空字符轉 16 進制
2 multipart/form-data 不對字符編碼,以二進制發送,適合文件上傳
3 text/plain 純文本發送,僅對空格編碼(轉爲+)

4. MIME 類型

4.1 概述

  • MIME: (Multipurpose Internet Mail Extensions)的簡寫,中文意思」多功能因特網郵件擴展」
  • MIME: 最初用來表示 Email 附件格式的字符串, 後來演變成爲網絡文檔或應用程序的文檔格式規範
  • MIME: 由一個媒體類型一個子類組成, 中間用斜線/分隔,例如text/css

4.2 類型

序號 類型 描述 示例
1 text 文本 text/plain,text/html,text/css,text/javascript
2 image 圖像 1 image/jpeg,image/gif,image/png,image/bmp,image/ webp,
2 image 圖像 2 image/x-iconimage/vnd.microsoft.icon
3 audio 音頻 audio/midiaudio/mpegaudio/webmaudio/oggaudio/wav
4 video 視頻 video/mp4,video/mpeg,video/webmvideo/ogg,video/x-msvideo
5 application 二進制 1 application/octet-streamapplication/javascriptapplication/ecmascript
5 application 二進制 2 application/json,application/pkcs12application/vnd.mspowerpoint
5 application 二進制 3 application/xhtml+xmlapplication/xmlapplication/pdf,application/x-gzip
  • 表中,以x-爲前綴的是尚未成爲國際標準的格式
  • 若是某個文檔不在該列表中,會識別爲: applicaton/octet-stream, 如.md文檔, 儘管它是純文本
相關文章
相關標籤/搜索