- 论坛徽章:
- 0
|
写了一个cgi 上传程序,在本机运行没有问题,可是将程序放到ftp服务器上,就不能运行,我想是不是因为ftp服务器有用户名,密码由于安全性的限制而导致的呢,应该怎样才能解决上传的问题呢?
以下是相关文件
1.html 文件(upload.html)
------------------------------------------------------
<html>
<head>
<title>upload file</title>
</head>
<body>
<h1>upload file</h1>
<form action="cgi-ssl/upload.cgi" method="post" enctype="multipart/form-data">
<p><input type="file" name="filename" /></p>
<p>
<input type="submit" value="送信" />
<input type="reset" value="リセット" />
</p>
</form>
</body>
</html>
2.cgi文件(upload.cgi)
-----------------------------------------------------------------
#!/usr/bin/perl -w
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
# POST size的上限
$CGI::POST_MAX = 1024 * 1024; # 1MB
my $query = new CGI;
# 初期设定-------------------------------------
# 最大size(KByte)
my $maxsize = 500;
# 保存路径
my $logfiles = "./file";
# 允许上传的文件的种类(MIME和扩张子)
my %hash_mime = (
'text/html' => 'html', # HTMLファイル
'image/jpeg' => 'jpg', # JPEGファイル
'image/pjpeg' => 'jpg', # プログレッシブJPEGファイル
'image/gif' => 'gif',
'text/plain'=>'txt'
);
# 文件取得
my $fH = $query->upload('filename');
# 错误检查
if ($query->cgi_error) {
my $err = $query->cgi_error;
&error("$err") if ($err);
}
&error("File transfer error.") unless (defined($fH));
# MIME类型取得
my $mimetype = $query->uploadInfo($fH)->{'Content-Type'};
# 保存的文件名取得
my $set = &set_name($mimetype);
# 文件大小取得
my $size = (stat($fH))[7];
# 文件大小制限
&error("The filesize is too large. Max $maxsize KB") if ($size > $maxsize * 1024);
# 文件保存 ---------------------------------
my ($buffer);
open (OUT, ">$logfiles/$set") || &error("Can't open $set");
binmode (OUT);
while(read($fH, $buffer, 1024)){
print OUT $buffer;
}
close (OUT);
close ($fH) if ($CGI::OS ne 'UNIX'); # Windowsプラットフォーム用
chmod (0666, "$logfiles/$set");
# HTML出力 -------------------------------------
print $query->header(-charset=>'Shift_JIS'),
$query->start_html(-lang=>'ja', -encoding=>'Shift_JIS', -title=>'upload.cgi');
print <<"HTML_VIEW";
<h1>ファイルアップロード</h1>
<p>ファイルのアップロードが完了しました。</p>
<ul>
<li>ファイル名: <a href="$logfiles/$set">$set</a></li>
<li>ファイルサイズ: $size byte</li>
<li>MIMEタイプ: $mimetype</li>
</ul>
HTML_VIEW
print $query->end_html;
exit;
# 文件名设定-----------------------------
sub set_name {
my ($mime) = @_;
# 扩张子设定
my $ext = $hash_mime{$mime} ? $hash_mime{$mime} : &error("Can't permit this file.");
# 文件名格式化
my $set = time . "_" . $$ . "." . $ext;
return $set;
}
# error output -----------------------------------
sub error {
my ($mes) = @_;
print $query->header(-charset=>'Shift_JIS'),
$query->start_html(-lang=>'ja', -encoding=>'Shift_JIS', -title=>'upload.cgi');
print <<"HTML_VIEW";
<h1>ERROR</h1>
<p>$mes</p>
HTML_VIEW
print $query->end_html;
exit;
}
[ 本帖最后由 luotuo_007 于 2006-2-27 13:52 编辑 ] |
|