我的子代码:
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的力量找到任何帮助。
答案 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
甚至没有到达远程服务器。