Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 在perl中上载文件时出错_File_Upload_Cgi_Perl - Fatal编程技术网

File 在perl中上载文件时出错

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

我正在尝试用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(“$!”); 二进制上传文件; 而() { 打印上传文件; } 关闭上传文件;
在这个变量($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/>/&gt;/g;
  s/</&lt;/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/>/&gt;/g;
  s/</&lt;/g;
  print $_;
}

print "</pre>\012";
print "</body></html>\012";