File 在perl中上载文件时出错
我正在尝试用perl上传一个文件,当我在ftp服务器上检查它时,该文件正在创建,但是那里的大小是0,我想知道为什么会发生这种情况,我搜索了很多次,尝试了很多次,但都没有解决这个问题,你能帮我吗 以下是我正在使用的代码: enter code here use CGI; my $query = new CGI; my $upload_dir = "/home/public_html/upload/avatars"; my $filename = $ses->getUserId."_".$query->param("profile_avatar"); my $org_filename = $ses->getUserId."_".$f->{profile_avatar}; my ($name, $path, $extension ) = fileparse ($org_filename , qr/\.[^\.]+$/ ); $filename = $name . $extension; my $safe_filename_characters = "a-zA-Z0-9_.-"; $filename =~ tr/ /_/; $filename =~ s/[^$safe_filename_characters]//g; $filename =~ s/.*[\/\\](.*)/$1/; my $upload_filehandle = $query->upload("profile_avatar"); open(UPLOADFILE, ">$upload_dir/$filename") or $ses->message("$!"); binmode UPLOADFILE; while (<$upload_filehandle>) { print UPLOADFILE; } close UPLOADFILE; 在这里输入代码 使用CGI; my$query=新CGI; my$upload_dir=“/home/public_html/upload/avatars”; 我的$filename=$ses->getUserId.'$query->param(“profile\u avatar”); 我的$org\u文件名=$ses->getUserId.“\u”。$f->{profile\u avatar}; 我的($name,$path,$extension)=文件解析($org\u filename,qr/\.[^\.]+$/); $filename=$name$扩展; 我的$safe_filename_characters=“a-zA-Z0-9_。-”; $filename=~tr/\uu/; $filename=~s/[^$safe\u filename\u characters]//g; $filename=~s/*[\/\\](.*)/$1/; 我的$upload\u filehandle=$query->upload(“profile\u avatar”); 打开(UPLOADFILE,“>$upload\u dir/$filename”)或$ses->message(“$!”); 二进制上传文件; 而() { 打印上传文件; } 关闭上传文件;File 在perl中上载文件时出错,file,upload,cgi,perl,File,Upload,Cgi,Perl,我正在尝试用perl上传一个文件,当我在ftp服务器上检查它时,该文件正在创建,但是那里的大小是0,我想知道为什么会发生这种情况,我搜索了很多次,尝试了很多次,但都没有解决这个问题,你能帮我吗 以下是我正在使用的代码: enter code here use CGI; my $query = new CGI; my $upload_dir = "/home/public_html/upload/avatars"; my $filename = $ses->ge
在这个变量($upload\U filehandle)中,我得到的是空白,没有任何意义,我不知道为什么会发生这种情况。任何帮助都将不胜感激。这是一个我知道可以工作的子程序 我有一个像你一样的CGI,用参数$query->param(“profile_avatar”)调用它
sub-upload\u-bin\u文件
{
我的($ufile)=@;
my$ufilename=“\L$ufile”#强制文件名为小写
$ufilename=~s/\\/\///g;#将反斜杠转换为正斜杠
my@dirs=split(/\/,$ufilename)#按路径拆分文件名
my$dfile=“$UFILE_DIR/$dirs[$#dirs]”#这只需要文件名部分
打印“上传到[$dfile]
\n的文件”#可选调试语句
打开(DEST,“>$dfile”)或死“[F]上载服务器:无法打开$dfile:$!”;
二进制模式(DEST);
binmode($ufile);
我的@src_内容=;
打印DEST@src\u内容;
关闭($ufile);
关闭(DEST);
$dfile;#返回我们上载的文件的名称
}
我不确定传入文件的binmode是答案,还是从文件名中删除路径。你可以试试看:)我也有同样的问题,并且浪费了很多时间试图解决它。就我而言,解决办法很简单,但一点也不明显。我正在把它记下来,以防人们觉得它有用 原来CGI.pm(3.5.2)在/usr/tmp中创建临时文件/ 由于我不太确定的原因,我的机器有超过480个这样的部件;有些相当大。原则上,这些应该在退出时删除,但显然仍然存在。当我删除它们时,事情又开始与原始脚本一起工作了,就像以前一样 不幸的是,我用“rm/usr/tmp/CGI*”在百灵鸟上清理了tmp/up,没有仔细查看。有可能tmp/被完全填满了,而我恰好腾出了一些空间。但是perl(v5.14.2)得到了它认为是一个完全正常的文件句柄。没有人注意到或抱怨(这是一个服务器,所以你认为他们应该有) 一路上有用的代码:
print "Content-type: text/html\012\012";
print "<html><head></head><body>\012";
print "<b>Below is an EXACT echo of what your browser sent:</b>\012<hr>";
print "<pre>\012";
while (<STDIN>) {
s/>/>/g;
s/</</g;
print $_;
}
print "</pre>\012";
print "</body></html>\012";
print“内容类型:text/html\012\012”;
打印“\012”;
打印“下面是您的浏览器发送的内容的准确回音:\012
”;
打印“\012”;
而(){
s///g;
/
print "Content-type: text/html\012\012";
print "<html><head></head><body>\012";
print "<b>Below is an EXACT echo of what your browser sent:</b>\012<hr>";
print "<pre>\012";
while (<STDIN>) {
s/>/>/g;
s/</</g;
print $_;
}
print "</pre>\012";
print "</body></html>\012";