免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2028 | 回复: 3
打印 上一主题 下一主题

cgi 写的上传文件的程序的一个问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-27 13:21 |只看该作者 |倒序浏览
写了一个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 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-02-27 16:41 |只看该作者
提示什么错误?是不是服务器的那个文件夹,你没有写的权限?

论坛徽章:
0
3 [报告]
发表于 2006-02-28 08:47 |只看该作者
服务器的那个文件夹我设的权限是755,应该可以吧,我不太清楚的是是否和ftp服务器设的用户名和密码有关呢?

论坛徽章:
0
4 [报告]
发表于 2006-02-28 12:34 |只看该作者
为啥是"日"语的?
看不懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP