PHP 檔案上傳 (1/2)
來源: Jollen 網路學院
作者: Jollen
利用 PHP
設計檔案上傳的程式屬於基本功,很多場合都會用到。要設計檔案上傳的程式是非常簡單的,只要輕輕點一下,大家都學得會!
設計上傳表單
首先,我們要設計一個上傳的表單,內容如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=big5">
<title>檔案上傳</title>
</head>
<body>
<form action="getfile.php" method="post" enctype="multipart/form-data">
上傳檔案: <input type="file"
name="userfile" size=16>
<input type="submit" value="上傳">
<input type="hidden" name="MAX_FILE_SIZE"
value="40960">
</form>
</body>
</html> |
紅色的部份是重點。enctype="multipart/form-data"
不能少,input type = file
會出現供選擇上傳檔案的欄位與按鈕。像這樣:
接收檔案
這是接收檔案的程式:
01: <?
02: If ($userfile != "none") {
03: echo "userfile: $userfile<br>";
04: echo "userfile_name: $userfile_name (Size:
$userfile_size)<br>";
05: copy($userfile,"/home/jollen/upload/$userfile_name");
06: unlink($userfile);
07: echo "上傳完成";
08: } else {
09: echo "沒有檔案";
10: }
11: ?> |
程式說明
加上行號是為了說明方便,使用時請去除行號。
userfile 是之前 form 的欄位 (input type = file)
名稱。程式要先判斷有沒有檔案上傳:
If ($userfile != "none")
如果沒有任何檔案被上傳,$userfile 就會是 "none"。當檔案被上傳後,PHP
會將檔案放到暫時的目錄下,並亂數取檔名,所以 $userfile
存放的就是上傳「後」的檔案路徑與檔名。
而檔案的「真實檔名」,也就是在使用者端原來的檔名 (上傳「前」檔名) 則是放在
$userfile_name 變數裡,檔案大小放在 $userfile_size
裡。這兩個變數名稱是相對於 $userfile 的,也就是,如果 form 的 input
type = file 欄位名稱是 myfile,則上傳後的檔案路徑與檔名存放於 $myfile,真實檔名與檔案大小存放於
$myfile_name、$myfile_size。
複製上傳檔案
接下來我們要將上傳後的檔案搬到適當的位置:
copy($userfile,"/home/jollen/upload/$userfile_name");
我們將 $userfile 複製到 /home/jollen/upload/,並用真實檔名儲存。要注意
$userfile 是包含路徑的,而 $userfile_name 只有檔名而已!
然後將上傳暫存的檔案刪除:
unlink($userfile);
執行結果
將檔案成功上傳後可以得到下面的訊息以茲鼓勵:
userfile: /tmp/phpvA6ALB
userfile_name: license.htm (Size: 1943)
上傳完成 |
錯誤訊息
如果看到底下的錯誤訊息:
Warning: Unable to create '/home/jollen/upload/license.htm': Permission
denied in /home/httpd/html/phpgroup.php.version/getfile.php on line 5 |
表示 /home/jollen/upload
目錄不存在或是權限問題,只要建立 /home/jollen/upload
目錄,並將目錄權限設成所有人都可以寫入 (chmod a+x /home/jollen/upload)
就可以了。 要注意,利用 copy() 複製檔案時,「會」覆蓋掉原來的舊檔案。
--Jollen |