[PHP]PHP簡易檔案上傳實作&問題

摘要:[PHP]PHP簡易檔案上傳實作&問題

 
想到先前有朋友剛好在寫檔案上傳的PHP程式,碰到了一些瓶頸
雖然程式都寫好了,但在測試的時候卻怎麼樣都不能使檔案上傳
 
會出現「Notice: Undefined index: file in」的錯誤訊息
如圖所示:
 
查詢了w3school後才知道,原來要上傳檔案的話,要在form部分加上enctype="multipart/form-data"
(<form enctype="value">)
而enctype=""中有三個參數,預設都是application/x-www-form-urlencoded為主要,在傳送時會將資料進行編碼(空格轉換為"+"加號,特殊符號轉換為ASCII HEX 值)
而第二種為multipart/form-data,這是不做任何編碼,而需要上傳檔案的話,就需要使用到這參數
text/plain則是空格轉換為"+"加號,但不對特殊符號編碼
 
 
這次實作需建立放檔案的file資料夾,以及index_file.php跟upload.php
測試實作程式碼:
「index_file.php」

<html>
    <head>
        <title>File_Upload</title>
        <meta http-equiv="content-type" charset="UTF-8"/>
    </head>
    <body>
    <h1>檔案上傳</h1>
        <form method="post" action="upload.php" enctype="multipart/form-data">
            選擇檔案:<input id="file" name="file" type="file" />
            <br />
            <input type="submit" value="上傳檔案" />
        </form>
    </body>
</html>
 
然而,在PHP的方面,在這裡會運用到以下$_FILES陣列:
$_FILES['file']['name']:檔案名稱
$_FILES['file']['type']:檔案的 Mini 類型
$_FILES['file']['size']:檔案大小,單位為 Byet
$_FILES['file']['tmp_name']:檔案的暫存位置
$_FILES['file']['error']:上傳檔案的錯誤代碼,若為 0 則表示沒有錯誤
(參考資料:http://www.w3schools.com/php/php_file_upload.asp)
 
測試實作程式碼:
「upload.php」

<html>
<head>
     <title>File_Upload</title>
     <meta http-equiv="content-type" charset="UTF-8"/>
</head>
<body>
     <h1>檔案上傳</h1>
         <?php
                if($_FILES['file']['error']>0){
                    echo "檔案上傳失敗";
                    }
                move_uploaded_file($_FILES['file']['tmp_name'], 'file/'.$_FILES['file']['name']);
                echo "路徑位置:".'<a href="file/'.$_FILES['file']['name'].'">file/'.$_FILES['file']['name'].'</a>';
                echo "<br />";
                echo "類型:".$_FILES['file']['type']."<br />大小:".$_FILES['file']['size']."<br />";
?>
</body>
</html>