程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php上傳文件詳解

php上傳文件詳解

編輯:關於PHP編程

上傳文件功能由兩個部分組成,HTML頁面和PHP處理部分。HTML頁面主要是讓用戶選擇所要上傳的文件,php部分讓我們可以把文件存儲到服務器的指定目錄。
一.HTML部分
upload.html
[html] 
<html> 
    <head> 
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> 
    </head> 
    <body> 
        上傳Demo: 
        <form action="upload.php" method="post" enctype="multipart/form-data"> 
            <input type="file" name="img" /> 
            <input type="submit" name="submit" value="上傳" /> 
        </form> 
    </body> 
</html> 
說明:
1.Input標簽中type="file",表明把輸入作為文件來處理。
2.Enctype規定了在提交這個表單時要使用哪種內容類型。在表單需要二進制數據時,比如文件內容,請使用"multipart/form-data",如果要上傳文件,這個屬性是必要的。
更多關於enctype的內容參見《HTML <form> 標簽的 enctype 屬性》

二.php部分
upload.php
[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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved