要在 PHP 建構的網站中上傳檔案,必須遵循以下幾個步驟:
1. 在網頁中建立一個上傳檔案的表單。
1 <form action="SaveFile.php" method="post" enctype="multipart/form-data">
2 <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
3 請輸入要上傳的檔案:<input type="file" name="myFileID" /><br/>
4 <input type="submit" value="上傳" />
5 </form>
說明:
(1) form 的 action 屬性指定了要處理上傳檔案的 PHP 程式。
(2) form 的 method 屬性一定要用 "POST" 方法傳送資料,而且必須加上 enctype="multipart/form-data" 屬性,才能正確上傳檔案。
(3) 利用隱藏的 input 欄位,name="MAX_FILE_SIZE" 來限制上傳的檔案大小。
(4) input type="file" 表可以讓使用者輸入或選擇檔案。name 屬性設定的名稱是處理上傳檔案的 PHP 程式所需要的依據。
2. 建立一個接收上傳檔案的 PHP 程式。承上例,此檔名為 SaveFile.php。
說明:
(1) 當使用者藉由表單上傳檔案時,Server 會先將檔案儲存為暫存檔,然後依照表單的 action 屬性,呼叫 PHP 程式來進行處理。在此例中,只要將暫存檔搬移到想要存放的資料夾中即可。
(2) PHP 會用內建變數 $_FILES 儲存上傳暫存檔的相關資訊。
$_FILES["myFileID"]["tmp_name"] 在 Server 端的暫存檔路徑與檔名。
$_FILES["myFileID"]["name"] 在用戶端的原始檔名,不含路徑。
$_FILES["myFileID"]["type"] 檔案的 MIME 類型,例如:"image/jpeg"。
$_FILES["myFileID"]["size"] 檔案的大小。
$_FILES["myFileID"]["error"] 錯誤代碼。
錯誤代碼
UPLOAD_ERR_OK 上傳成功。
UPLOAD_ERR_INI_SIZE 檔案大於 php.ini 中 upload_max_filesize 的設定。
UPLOAD_ERR_FORM_SIZE 檔案大於表單中的 MAX_FILE_SIZE 設定。
UPLOAD_ERR_PARTIAL 部份內容上傳成功。
UPLOAD_ERR_NO_FILE 沒有上傳的檔案。
(3) 判斷上傳成功後,利用 move_uploaded_file() 將暫存檔案搬移到想要的資料夾中。
move_uploaded_file(filename, destination);
filename 傳存檔名稱。
destination 目的路徑與檔名。若檔案已存在,則覆蓋。
3. 也可以將上傳的檔案存在 MySQL 中。
01
$aDB = mysql_connect('localhost', 'root', 'xxxxx');
02
mysql_select_db("test", $aDB);
03
$data = addslashes(fread(fopen($myFileID, "r"), filesize($myFileID)));
04 
05 $szSQL = "INSERT INTO photo (`ID`, `Size`, `Type`, `Data`) ";
06
$szSQL.= "VALUES ('$myFileID_name', $myFileID_size, '$myFileID_type', '$data')";
07
$result = mysql_query($szSQL);
08
if( !$result )
09
{
10
die("100.無法存檔!");
11
exit();
12
}
...
說明:
(1) $_FILES["myFileID"]["name"] 也可以寫成 $myFileID_name,因為 $myFileID 代表著 $_FILES["myFileID"]。
(2) 與 MySQL 相關的部份,在此就不多加說明。
Tags: