檔案提交頁面既已產生,下面任務就很明確了:將提交的檔案內容儲存到伺服器上。
下面我們用兩種方法來實現這個功能:
1. 用 php 來儲存:
我們先定義一個檔案儲存函數 fup() 它有兩個參數:
$filename: 檔案內容
$fname: 檔案名稱(包含路徑)
剩下的就是寫一個迴圈將檔案依次寫入伺服器。這裡要簡單說明一下:
PHP 對於上傳檔案的處理是這樣的:如果提交的檔案框我為 file0, 那麼提交給 PHP 的檔案內容儲存在變數 $file0 中,而檔案名稱則儲存在 $file0_name 中。這樣在這個迴圈中我要做的就是將提交頁面提交的內容分解出來,實現過程請看下面的代碼。
fileup.php
----------------------------------------------------------------------
function fup($filename,$fname)
{ If($filename != "none") {
copy($filename,$fname);
unlink($filename);
}
}
for($i=0;$i<$cnt;$i++)
{
$ffnn="file".$i;
$ffnnname=$ffnn."_name";
$ffpath="path".$i;
//PRint $$ffnn;
print $$ffnnname;
print "
";
fup($$ffnn,$$ffpath.$$ffnnname); //"../www/test/tmp/"
}
?>
----------------------------------------------------------------------
2. 用 PERL 來儲存:
它們實現的原理完全一樣,在此不多說,請看代碼:
fileup.cgi(fileup.pl)
----------------------------------------------------------------------
#!/usr/bin/perl
use CGI qw/:standard/;
if ($ENV{'CONTENT_TYPE'} !~ /multipart/form-data/) {
print "Cache-Control: no-cachenPragma: no-cachen" .
"Content-Type: text/htmlnn" .
"Your web browser cannot upload files. Sorry.";
exit 0;
}
$cntfile=param('cnt');
print header;
print start_html;
#print "Receiving Please wait....";
&g_head;
#$writed = '../www/test/tmp/';
for ($i=0;$i<$cntfile;$i++){
$paramfile = 'file'.$i;
$parampath='path'.$i;
$writed=param($parampath);
&upfile;
&g_body;
}
&g_bott;
#<<<<<<<<<<<<<<<<<<<<<以下為自訂過程<<<<<<<<<<<<<<<<<<<<<<<<<
sub upfile
{
$maxdata = 512000;
# $writed = '../www/test/tmp/';
$strRFname=reverse $xfile;
$intIndex=index($strRFname,'\');
$strNetFname=substr($strRFname,0,$intIndex);
$strNetFname=scalar reverse $strNetFname;
if((stat $xfile)[7]>$maxdata){
print "Status: 411 Size Not Allowedn" .
"Content-Type: text/htmlnAllow: POSTnn" .
"411 411 Size Not Allowed
You got big problem. Try again.
n";
exit 0;
}
binmode $xfile;
use File::Copy;
copy($xfile,$writed.$strNetFname);
}
sub g_head{
print '
'; print '
檔案上傳結果(Upload Result) |
'; print '
'; print '
SourceFile: | '; print '
DestFile: | '; print '
Upload | '; print '
'; } sub g_body{ print '
'; print '
'.$xfile .' | '; print '
'.$writed.$strNetFname.' | '; print '
OK! | '; print '
'; } sub g_bott{ print '
';
}
----------------------------------------------------------------------
如有好的建議請 Email: gearsoft@netease.com
【本文著作權歸作者gearsoft與奧索網共同擁有,如需轉載,請註明作者及出處】