想到先前有朋友剛好在寫檔案上傳的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 />";
}
?>