如何用PHP實現檔案上傳例子
來源:互聯網
上載者:User
上傳 如何用PHP實現檔案上傳(執行個體1)
上傳檔案表單網頁:updatefile.htm
<html>
<head>
<title>上傳檔案表單</title>
</head>
<body>
<form ENCTYPE="multipart/form-data" ACTION="updatefile.php3" METHOD="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
<div align="center"><center> 請選取檔案:
<input NAME="userfile" TYPE="file">
<input TYPE="submit" VALUE="Send File">
</center></div>
</form>
</body>
</html>
----------------------------------------------------------------
處理上傳檔案網頁:updatefile.php3
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=gb2312">
<title>處理上傳檔案</title>
</head>
<body>
<?
copy($userfile, "newfilename");
echo $userfile." - 使用者上傳到伺服器上的檔案臨時存放的名稱<br>";
echo $userfile_name." - 在使用者機器上該檔案的原始名稱<br>";
echo $userfile_size." - 上傳檔案的實際位元組數<br>";
echo $userfile_type." - 如果使用者的瀏覽器提供了這個資訊的話,
它表示mime的類型。例如
image/gif<br>";
?>
</body>
</html>
----------------------------------------------------------------
注意:檔案上傳後必須拷貝到新的地方或重新更名,
否則當進程執行完後,上傳樣本將被刪除
如何用PHP3實現檔案上傳(執行個體2)
PHP3是一種非常強大的CGI指令碼語言,就其語言特點基本上源於C,
就其實現方式而言更象PERL,而其對資料庫的內在支援更使之成為ASP
的強大對手。
首先在前台必須有一個介面
<HTML>
<HEAD>
<TITLE>檔案上傳介面</TITLE>
</HEAD>
<BODY><TABLE><CENTER>
<FORM ENCTYPE = "multipart/form-data" NAME = "SubmitForm"
ACTION = "upload.php3" METHOD = "POST">
<INPUT TYPE = "hidden" NAME = "MAX_FILE_SIZE" VALUE ="1000000">
<TR>
<TD><INPUT NAME = "UploadFile" TYPE = "file" SIZE = "30"></TD>
</TR>
<TR>
<TD><INPUT NAME = "submit" VALUE = "提交" TYPE = "submit"></TD>
<TD><INPUT NAME = "reset" VALUE = "重設" TYPE = "reset"></TD>
</TR>
</FORM></CENTER></TABLE></BODY>
</HTML>
值得注意的是一個 MAX_FILE_SIZE的隱藏範圍,通過設定其VALUE可
以限制上傳檔案的大小。
然後在後台實現檔案上傳操作。如果只是最基本的上傳,寥寥幾行
就可以搞定
<?
If($UploadFile != "none")
{
copy($UploadFile,"$UploadFile_name");
unlink($UploadFile);
}
else
{
echo "你沒有選擇任何檔案上傳!";
}
?>
因為form傳遞過來的值自動賦值給同名變數,所以直接通過
$UploadFile可以訪問上傳的檔案,但由於這是一個儲存檔案的變數,因此
檔案名稱字必須通過另外一個$UploadFile_
name變數取得。在拷貝檔案後刪去臨時檔案(unlink)。
上面的代碼完全可以工作,但實際應用中漏洞百出,讓我們逐步來完善之
首先,上傳的檔案必須有一個固定的目錄儲存,我們在這裡用一個
$UploadPath變數儲存之,如
$UploadPath = "/home/flier/upload/";
或複雜一點的自動定位,如
$UploadPath = AddSlashes(dirname
($PATH_TRANSLATED))."\\upload\\";
$PATH_TRANSLATED顧名思義是當前傳送目錄,
我們假定以其一個名為upload
的子目錄來儲存上傳的檔案。dirname函數返回其目錄名,
然後加上子目錄名
然後用一個變數$FileName儲存完整的上傳後檔案名稱和路徑
$FileName = $UploadPath.$UploadFile_name;
其次,我們還想讓使用者得知上傳檔案的簡要資訊,如上傳檔案的大小
if($UploadFile_size <1024)
//上傳檔案大小
{
$FileSize = (string)$UploadFile_size . "位元組";
}
elseif($UploadFile_size <(1024 * 1024))
{
$FileSize = number_format((double)
($UploadFile_size / 1024), 1) . " KB";
}
else
{
$FileSize = number_format((double)
($UploadFile_size / (1024 * 1024)), 1) . " MB";
}
number_format函數起到格式化輸出的作用,具體用法請參照手冊
下一步我們必須考慮到檔案已經存在和拷貝操作失敗的情況,並提
供相應的提示資訊
if(!file_exists($FileName))
{
if(copy($UploadFile,$FileName))
{
echo "檔案 $UploadFile_name
($FileSize)上傳成功!";
}
else
{
echo "檔案 $UploadFile_name上傳失敗!";
}
unlink($UploadFile);
}
else
{
echo "檔案 $UploadFile_name已經存在!";
}
然後我們應該考慮到大檔案上傳時容易出現逾時的情況,可以用
set_time_limit($TimeLimit);加大逾時限制時間。
最後,把截面和實現代碼綜合到一個單獨的檔案中,為了實現這
個想法,我們通過在 form中添加一個隱含值
<INPUT TYPE = "hidden" NAME = "UploadAction" VALUE = "1">指出
當前的狀態(介面或實現),以便區分對待完成代碼如下
(檔案名稱upload.php3)
<?
if(!$UploadAction):
?>
<HTML>
<HEAD>
<TITLE>檔案上傳介面</TITLE>
</HEAD>
<BODY><TABLE><CENTER>
<FORM ENCTYPE = "multipart/form-data" NAME = "SubmitForm"
ACTION = "upload.php3" METHOD = "POST">
<INPUT TYPE = "hidden" NAME = "MAX_FILE_SIZE" VALUE ="1000000">
<INPUT TYPE = "hidden" NAME = "UploadAction" VALUE = "1">
<TR>
<TD><INPUT NAME = "UploadFile" TYPE = "file" SIZE = "30"></TD>
</TR>
<TR>
<TD><INPUT NAME = "submit" VALUE = "提交" TYPE = "submit"></TD>
<TD><INPUT NAME = "reset" VALUE = "重設" TYPE = "reset"></TD>
</TR>
</FORM></CENTER></TABLE></BODY>
</HTML>
<?
else:
?>
<HTML>
<HEAD>
<TITLE>檔案上傳代碼</TITLE>
</HEAD>
<BODY>
<?
$UploadAction=0;
$TimeLimit=60; /*設定逾時限制時間
預設時間為 30秒
設定為0時為不限時 */
set_time_limit($TimeLimit);
If(($UploadFile != "none")&&
($UploadFile != ""))
{
$UploadPath = AddSlashes(dirname($PATH_TRANSLATED))."\\upload\\";
//上傳檔案存放路徑
$FileName = $UploadPath.$UploadFile_name; //上傳檔案名稱
if($UploadFile_size <1024) //上傳檔案大小
{
$FileSize = (string)$UploadFile_size . "位元組";
}
elseif($UploadFile_size <(1024 * 1024))
{
$FileSize = number_format((double)($UploadFile_size / 1024), 1) . " KB";
}
else
{
$FileSize = number_format((double)($UploadFile_size/(1024*1024)),1)."MB";
}
if(!file_exists($FileName))
{
if(copy($UploadFile,$FileName))
{
echo "檔案 $UploadFile_name ($FileSize)上傳成功!";
}
else
{
echo "檔案 $UploadFile_name上傳失敗!";
}
unlink($UploadFile);
}
else
{
echo "檔案 $UploadFile_name已經存在!";
}
}
else
{
echo "你沒有選擇任何檔案上傳!";
}
set_time_limit(30); //恢複預設逾時設定
?>
<BR><A HREF = "upload.php3">返回</A>
</BODY>
</HTML>
<?
endif;
?>