如何用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;
?>


 

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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