perl Web表单脚本的命令行和CGI的结果不同

时间:2010-12-01 14:11:36

标签: perl cgi

我的子代码:

sub put_file
{
    my($host, $placement_directory, $tar_directory, $filename, $user, $pass) = @_;
    my $ftp = Net::FTP->new($host) or die "cannot connect to localhost";

    $ftp->login($user, $pass) or die "cannot log in";

    $ftp->cwd($placement_directory);
    print $tar_directory."/".$filename;
    $ftp->put("$tar_directory/$filename") or die "cannot put file ", $ftp->message;

    print "File has been placed \n";
}

因此,当从使用相同配置文件的测试脚本(从命令行运行)调用此子集并执行与CGI脚本相同的操作时,不会发现任何错误并且文件正确放置。当从我的CGI脚本调用sub时,脚本将输出$ tar_directory。“/”。$ filename但不是“文件已被放置\ n”而ftp->消息输出“无法将文件目录成功更改”。这似乎来自它之前的cwd线。

其他信息: 我尝试将测试脚本作为多个用户运行,结果相同。 我使用严格和警告。 正在移动的tar文件由脚本创建。

我是perl的新手,所以任何建议都有帮助,因为我坚持这一点,无法利用Google的力量找到任何帮助。

2 个答案:

答案 0 :(得分:0)

只是一个猜测。你的ftp-> put失败了,触发了死亡。除非你有:

use CGI::Carp qw(carpout fatalsToBrowser);

您将无法在浏览器中看到骰子消息。自从你去世以来,你也没有看到最终的印刷陈述。

检查您的网络服务器日志以查看芯片输出,或者只需将“die”更改为“print”。

答案 1 :(得分:0)

Net::FTP可以put()来自文件句柄以及文件名:

open my $fh, '<', $tar_directory . '/' . $filename or die "Could not open file: $!";
$ftp->put($fh, $filename) or die "cannot put file ", $ftp->message;

如果问题在您身边,那么open应该会失败,您应该收到某种错误消息,希望能告诉您哪里出了问题;如果问题出在远程,那么put应该会失败,你会看到你现在看到的同样的事情。

$ftp->message只有来自cwd的成功消息表明远程端的一切正常,put甚至没有到达远程服务器。