我有一个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";
}
我确实验证了
$from_fh
的值对于两次运行都是相同的。
以下块中使用的所有值对于两次运行都完全相同。
答案 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()函数,则已经读取了整个文件上载。因此,如果我自己的代码再次尝试读取该文件,它将收到零数据,因为数据已经准备就绪。