Perl HTML文件上传问题。文件大小为零

时间:2013-04-04 21:09:13

标签: html perl upload size zero

我有一个perl CGI脚本,可以将文件从PC上传到Linux服务器。

当我用我自己的HTML表单编写CGI调用然后执行时,它完全按预期工作,但是当我将相同的调用放入现有应用程序时,该文件是在服务器上创建的,但是没有得到数据,它的大小为零。

我已经比较了环境变量(我可以从%ENV中提取的那些)并且看起来没有任何原因。我实际上尝试将我自己的HTML脚本中的几个ENV更改为现有应用程序使用的值,这并没有揭示问题。

日志中没有任何内容给我一个线索,上传操作认为它是成功的。 两个测试的用户是相同的。如果权限是个问题,那么甚至不会在服务器上创建该文件。

IE中的结果与Chrome中的结果相同(来自我自己的HTML脚本,而不是来自应用程序内部。)

我应该看一下具体的设置,进行比较?

这是上传代码:

if (open(UPLOADFILE, ">$upload_dir/$fname")) {
    binmode UPLOADFILE;

    while (<$from_fh>) {
        print UPLOADFILE;
    }
    close UPLOADFILE;
    $out_msg = "Done with Upload: upload_dir=$upload_dir fname=$fname";
}
else {
    $out_msg = "ERROR opening for upload: upload_dir=$upload_dir filename=$filename";
}

我确实验证了

  • 从应用程序内部运行时,它不会进入while循环。
  • 从我自己的HTML脚本调用时,它会进入while循环。

$from_fh的值对于两次运行都是相同的。 以下块中使用的所有值对于两次运行都完全相同。

2 个答案:

答案 0 :(得分:0)

您可以查看打开的错误结果吗?

my $err;
open(my $uploadfile, ">", "$upload_dir/$fname") or $err = $!;
if (!$uploadfile) {
  my $out_msg = "ERROR opening for upload: upload_dir=$upload_dir filename=$filename: $err";
}
else {
  ### Stuff
  ...;
}

答案 1 :(得分:0)

我的猜测,基于您将其嵌入到另一个应用程序中的事实,所有输入都已被其他应用程序中的某些功能读取。例如,如果我尝试将此程序用作CGI脚本的一部分,并且我使用了CGI.pm中的param()函数,则已经读取了整个文件上载。因此,如果我自己的代码再次尝试读取该文件,它将收到零数据,因为数据已经准备就绪。