php上傳檔案詳解_PHP教程

來源:互聯網
上載者:User
上傳檔案功能由兩個部分組成,HTML頁面和PHP處理部分。HTML頁面主要是讓使用者選擇所要上傳的檔案,php部分讓我們可以把檔案儲存體到伺服器的指定目錄。
一.HTML部分
upload.html
[html]





上傳Demo:



說明:
1.Input標籤中type="file",表明把輸入作為檔案來處理。
2.Enctype規定了在提交這個表單時要使用哪種內容類型。在表單需要位元據時,比如檔案內容,請使用"multipart/form-data",如果要上傳檔案,這個屬性是必要的。
更多關於enctype的內容參見《HTML 標籤的 enctype 屬性》

二.php部分
upload.php
[php]
$DST_DIR = '/data/upload/';
if ($_FILES['img']['name'] != '') {
if ($_FILES['img']['error'] > 0) {
echo "上傳失敗";
}
else {
if (move_uploaded_file($_FILES['img']['tmp_name'], $DST_DIR.$_FILES['img']['name'])) {
echo "上傳成功";
}
else {
echo "上傳失敗";
}
}
}
else {
echo "請上傳檔案";
}
說明:
1. 全域變數$_FILE
此數組包含有所有上傳的檔案資訊。
以我們假設檔案上傳欄位的名稱如上例所示,為 img。則
$_FILES['img']['name']
用戶端上傳的檔案的原名稱。
$_FILES['img']['type']
檔案的 MIME 類型,如果瀏覽器提供此資訊的話。一個例子是“image/gif”。不過此 MIME 類型在 PHP 端並不檢查,因此不要想當然認為有這個值。$_FILES['img']['size']:已上傳檔案的大小,單位為位元組。
$_FILES['img']['size']
已上傳檔案的大小,單位為位元組。
$_FILES['img']['tmp_name']
檔案被上傳後在服務端儲存的臨時檔案名稱。
$_FILES['img']['error']
和該檔案上傳相關的錯誤碼。

2. 關於錯誤碼
$_FILES['img']['error']有以下幾種類型
UPLOAD_ERR_OK
其值為 0,沒有錯誤發生,檔案上傳成功。
UPLOAD_ERR_INI_SIZE
其值為 1,上傳的檔案超過了 php.ini 中 upload_max_filesize選項限制的值。
UPLOAD_ERR_FORM_SIZE
其值為 2,上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
UPLOAD_ERR_PARTIAL
其值為 3,檔案只有部分被上傳。
UPLOAD_ERR_NO_FILE
其值為 4,沒有檔案被上傳。
UPLOAD_ERR_NO_TMP_DIR
其值為 6,找不到臨時檔案夾。PHP 4.3.10 和 PHP 5.0.3 引進。
UPLOAD_ERR_CANT_WRITE
其值為 7,檔案寫入失敗。PHP 5.1.0 引進。

3.move_uploaded_file
檔案被上傳後,預設地會被儲存到服務端的預設臨時目錄中(除非 php.ini 中的 upload_tmp_dir設定為其它的路徑),檔案名稱是隨機的。如果該檔案沒有被移動到其它地方也沒有被改名,則該檔案將在表單請求結束時被刪除。因此需要通過move_uploaded_file移動臨時檔案。
經實驗copy也能完成move_uploaded_file的功能,為啥要用move_uploaded_file呢?有說法是move_uploaded_file會對上傳檔案做一些檢查,防止copy引起的一些安全性漏洞。但具體copy會帶來什麼問題呢?我並沒有查到。有知道的同學,歡迎留言。
Anyway,既然php給了特定的函數,必然有一定道理,先這麼用吧。

三.安全檢查
可以考慮通過$_FILES['img']['size']和$_FILES['img']['type']對上傳的檔案做一些安全檢查,比如限定上傳類型,上傳檔案的大小等。

作者;qmhball

http://www.bkjia.com/PHPjc/478030.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478030.htmlTechArticle上傳檔案功能由兩個部分組成,HTML頁面和PHP處理部分。HTML頁面主要是讓使用者選擇所要上傳的檔案,php部分讓我們可以把檔案儲存體到伺服器...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.