Jollen 網路學院
|| Jollen 的 Embedded Linux 訓練方案 | Jollen 的 Embedded Linux 系列著作 ||
□ Jollen網路學院 >> PHP 讀者服務 >> PHP 練功房 □

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

PHP 練功房
· PHP 檔案上傳 (2/2)
· PHP 檔案上傳 (1/2)
· Pageview 計數器
· PHP 命令模式的使用
· 如何調整時差 (2/2)
· 如何調整時差 (1/2)
· 去除字串裡的 HTML 語法
· 以物件方式維護資料
回首頁 |  TOP |
    Copyright (c) 2006 www.jollen.org
All rights reserved. 更新日期: 2006/04/11