用PHP實現檔案上傳

來源:互聯網
上載者:User


在WebDev網站上經常看到的一個問題是關於檔案上傳的。在這篇文章裡我將解釋如何用PHP實現檔案
上傳。 設計上傳表格

我們主要的目標是完成檔案從本機電腦上傳到伺服器上去。為了做到這一點,我們需要做一個表
格,允許使用者選擇一個檔案並可以提交它。下面是一個例子:

<HTML>
<HEAD>
<TITLE>檔案上傳表格</TITLE>
</HEAD>
<BODY>
<TABLE>
<FORM ENCTYPE="multipart/form-data" NAME=MyForm
ACTION=submit.php3
METHOD="POST">
<TR><TD>選擇上傳檔案</TD><TD><INPUT NAME="MyFile"
TYPE="File"></TD></TR>
<TR><TD COLSPAN="2"><INPUT NAME="submit" VALUE="上傳"
TYPE="submit"></TD></TR>
</TABLE>
</BODY>
</HTML>

注意表格中的ENCTYPE="multipart/form-data"部分。這個一定不能錯,否則伺服器將不知道你在上
傳檔案。

設計上傳程式

現在我們已經完成了前台部分,讓我們再仔細地考慮後台是如何接收檔案並儲存它到我們指定的目
錄下去。下面就開始用PHP了。這是submit.php3的程式:

<?
If($MyFile != "none") {
copy($MyFile,"/home/berber/$MyFile_name");
unlink($MyFile);
}
else {
echo"你沒有上傳任何文?;
}
?>

不管你信不信,這就是整個處理過程。我們在程式中所做的就是:

1. 檢查是否一個檔案已經上傳到伺服器,通過If($MyFile != "none");
2. 拷貝檔案到指定位置。
3. 刪除臨時檔案。

當你按下了提交按鈕後,檔案將會從你的電腦上傳到伺服器的臨時目錄下。在臨時目錄下的檔案
名為一個臨時檔案。應該使用file欄位的name值來訪問它,在這裡為$MyFile。真正的檔案名稱使用file
欄位的name值加上"_name"來訪問它,在這裡為$MyFile_name。使用copy()函數,將臨時檔案$MyFile拷
貝到指定目錄下,拷貝後的檔案名稱為$MyFile_name。完成後不要忘了刪除臨時檔案,不然你會有許多你
不想要的檔案。

設定檔案名稱

一個可能讓程式員睡不著覺的事情就是試圖改變file欄位的VALUE屬性的值。並不是很多人知道它
是不可能的。儘管W3C說可以,但實際上,象IE和Netscape都不允許設定VAUE屬性的值。聽上去有點可
笑,為什麼我不能設定一個初始值,這樣讓使用者使用起來更方便呢?如果你那樣做,那你就會發現你帶
來了一個安全上的漏洞。可以設想一下,你登入到我的網站,我可以改變一個表格中的file欄位的值。
那麼有許能阻止我把你的/etc/passwd檔案上傳呢?更進一步的,我不需要你按下提交按鈕,我可先設
置file欄位的值,然後通過一段JavaScript程式來類比提交動作...哇嗚...我可以處理你機器上的任何
檔案了。因為這個原因,瀏覽器簡單地把<INPUT>標記中的file欄位的VALUE欄位給忽略了。

限制檔案大小

另一個酷的特性是限制上傳檔案的大小選項。只要增加一個<INPUT>標記就可以了:

<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000">

這個將不允許使用者上傳超過100KB的檔案。

顯示檔案大小

為了顯示檔案大小,可以通過file欄位name屬性值加上"_size"這個變數來訪問。在我們的例子中
就是使用$MyFile_size。所以,如果你想告訴使用者上傳檔案的大小,你可以象下面那樣去做:

echo "You have just uploaded $MyFile_name";
echo "The size of the file is $MyFile_size";

許可權

很明顯你需要對目標目錄的寫的許可權。如果一個使用者用匿文上傳檔案,那他的使用者名稱應該是
"bobody"。這個使用者必須有對目標目錄寫的許可權否則你可能得到一個象下面的資訊:

Warning: Unable to create '/home/berber/berber.txt':
Permission denied
in /home/berber/submit.php3 on line 5

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.