實例1:
上載文件表單網頁:updatefile.htm
上載文件表單[Ctrl+A 全部選擇 然后拷貝]
處理上載文件網頁:updatefile.php3
處理上載文件copy($userfile, "newfilename");
echo $userfile." - 用戶上傳到服務器上的文件臨時存放的名稱
";
echo $userfile_name." - 在用戶機器上該文件的原始名稱
";
echo $userfile_size." - 上傳文件的實際字節數
";
echo $userfile_type." - 如果用戶的瀏覽器提供了這個信息的話,
它表示mime的類型。例如
image/gif
";
?>
[Ctrl+A 全部選擇 然后拷貝]
注意:文件上載后必須拷貝到新的地方或重新更名,否則當進程執行完后,上載樣本將被刪除
實例2:
PHP3是一種非常強大的CGI腳本語言,就其語言特點基本上源于C,就其實現方式而言更象PERL,而其對數據庫的內在支持更使之成為ASP的強大對手。
首先在前臺必須有一個界面
文件上載界面ACTION = "upload.php3" METHOD = "POST">
[Ctrl+A 全部選擇 然后拷貝]
值得注意的是一個 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
$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中添加一個隱含值指出當前的狀態(界面或實現),以便區分對待完成代碼如下:
upload.php3:
if(!$UploadAction):
?>
文件上載界面ACTION = "upload.php3" METHOD = "POST">
else:
?>
文件上載代碼$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
{
$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); //恢復缺省超時設置
?>
返回
endif;
?>[Ctrl+A 全部選擇 然后拷貝]
出處:
責任編輯:cjj
◎進入論壇網絡編程版塊參加討論