iT邦幫忙

DAY 3
3

遭遇PHP之經驗分享系列 第 3

[鐵人賽Day3]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則是空格轉換為"+"加號,但不對特殊符號編碼
(詳細參考資料:http://www.w3schools.com/tags/att\_form\_enctype.asp)

這次實作需建立放檔案的file資料夾,以及index_file.php跟upload.php
測試實作程式碼:
「index_file.php」

        <title>File_Upload</title>
        <meta http-equiv="content-type" charset="UTF-8"/>
    
    
    <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>
    

然而,在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」

     <title>File_Upload</title>
     <meta http-equiv="content-type" charset="UTF-8"/>


     <h1>檔案上傳</h1>
         <?php
                if($_FILES['file']['error']>0){
                    echo "檔案上傳失敗";
                    }else{
                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 />";
}
?>

上一篇
[鐵人賽Day2] GET/POST 的差異與配合PHP用法
下一篇
[鐵人賽Day4]上傳中文名稱檔案,會無法上傳
系列文
遭遇PHP之經驗分享30

尚未有邦友留言

立即登入留言