明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

用PHP完成文件上傳

[摘要]在WebDev站點(diǎn)上經(jīng)?吹降囊粋(gè)問題是關(guān)于文件上傳的。在這篇文章里我將解釋如何用PHP實(shí)現(xiàn)文件上傳。 設(shè)計(jì)上傳表格 我們主要的目標(biāo)是完成文件從本地計(jì)算機(jī)上傳到服務(wù)器上去。為了做到這一點(diǎn),我們需要做一個(gè)表格,允許用戶選擇一個(gè)文件并可以提交它。下面是一個(gè)例子: <HTML> <HE...

在WebDev站點(diǎn)上經(jīng)常看到的一個(gè)問題是關(guān)于文件上傳的。在這篇文章里我將解釋如何用PHP實(shí)現(xiàn)文件
上傳。 設(shè)計(jì)上傳表格

我們主要的目標(biāo)是完成文件從本地計(jì)算機(jī)上傳到服務(wù)器上去。為了做到這一點(diǎn),我們需要做一個(gè)表
格,允許用戶選擇一個(gè)文件并可以提交它。下面是一個(gè)例子:

<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"部分。這個(gè)一定不能錯(cuò),否則服務(wù)器將不知道你在上
傳文件。

設(shè)計(jì)上傳程序

現(xiàn)在我們已經(jīng)完成了前臺(tái)部分,讓我們再仔細(xì)地考慮后臺(tái)是如何接收文件并保存它到我們指定的目
錄下去。下面就開始用PHP了。這是submit.php3的程序:

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

不管你信不信,這就是整個(gè)處理過程。我們在程序中所做的就是:

1. 檢查是否一個(gè)文件已經(jīng)上傳到服務(wù)器,通過If($MyFile != "none");
2. 拷貝文件到指定位置。
3. 刪除臨時(shí)文件。

當(dāng)你按下了提交按鈕后,文件將會(huì)從你的計(jì)算機(jī)上傳到服務(wù)器的臨時(shí)目錄下。在臨時(shí)目錄下的文件
名為一個(gè)臨時(shí)文件。應(yīng)該使用file字段的name值來訪問它,在這里為$MyFile。真正的文件名使用file
字段的name值加上"_name"來訪問它,在這里為$MyFile_name。使用copy()函數(shù),將臨時(shí)文件$MyFile拷
貝到指定目錄下,拷貝后的文件名為$MyFile_name。完成后不要忘了刪除臨時(shí)文件,不然你會(huì)有許多你
不想要的文件。

設(shè)置文件名

一個(gè)可能讓程序員睡不著覺的事情就是試圖改變file字段的VALUE屬性的值。并不是很多人知道它
是不可能的。盡管W3C說可以,但實(shí)際上,象IE和Netscape都不允許設(shè)置VAUE屬性的值。聽上去有點(diǎn)可
笑,為什么我不能設(shè)置一個(gè)初始值,這樣讓用戶使用起來更方便呢?如果你那樣做,那你就會(huì)發(fā)現(xiàn)你帶
來了一個(gè)安全上的漏洞?梢栽O(shè)想一下,你登錄到我的網(wǎng)站,我可以改變一個(gè)表格中的file字段的值。
那么有許能阻止我把你的/etc/passwd文件上傳呢?更進(jìn)一步的,我不需要你按下提交按鈕,我可先設(shè)
置file字段的值,然后通過一段JavaScript程序來模擬提交動(dòng)作...哇嗚...我可以處理你機(jī)器上的任何
文件了。因?yàn)檫@個(gè)原因,瀏覽器簡單地把<INPUT>標(biāo)記中的file字段的VALUE字段給忽略了。

限制文件大小

另一個(gè)酷的特性是限制上傳文件的大小選項(xiàng)。只要增加一個(gè)<INPUT>標(biāo)記就可以了:

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

這個(gè)將不允許用戶上傳超過100KB的文件。

顯示文件大小

為了顯示文件大小,可以通過file字段name屬性值加上"_size"這個(gè)變量來訪問。在我們的例子中
就是使用$MyFile_size。所以,如果你想告訴用戶上傳文件的大小,你可以象下面那樣去做:

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

權(quán)限

很明顯你需要對目標(biāo)目錄的寫的權(quán)限。如果一個(gè)用戶用匿文上傳文件,那他的用戶名應(yīng)該是
"bobody"。這個(gè)用戶必須有對目標(biāo)目錄寫的權(quán)限否則你可能得到一個(gè)象下面的信息:

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


標(biāo)簽:用PHP完成文件上傳