Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I'm using Net::ftp to pick up a file from another server.

The problem is that it's creating an empty file on the originating server, and I don't know why. $filename is being found, which I have tested by changing its name and getting a software error. The file is populated on the remote server but as I say the file is being printed empty on the originating server

I'd be grateful for any insight. I would also like to know how I can process the file on the fly so that I don't have to print to the server but can read the file on the remote and use the information in the script. Thanks.
#!/usr/bin/perl -w use strict; use Net::FTP; use CGI::Carp qw(fatalsToBrowser warningsToBrowser); use CGI; my $query = new CGI; my $pid = $query->param('pid'); my $home="site.com"; my $username="sitecom"; my $password="sitepass"; my $directory="cgi-bin"; my $filename="$pid" . '.txt'; my $newfile = "ftptest.cgi"; my $ftp = Net::FTP->new("$home") or die "Can't connect: $@\n"; $ftp->login($username, $password) or die "Couldn't login\n"; $ftp->cwd($directory) or die "Couldn't change direct +ory\n"; $ftp->get($filename, $newfile) or die "Couldn't get + $filename\n"; print "Content-type: text/html\n\n"; print 'done';

Replies are listed 'Best First'.
Re: net::ftp question
by derby (Abbot) on Dec 18, 2006 at 16:11 UTC

    I don't understand. Are you saying that when you retrieve the file from the *ftp server* to the *web server*, the file has zero bytes? How do you know? How do you know the size of the file on the *ftp server*? Or are you trying to display the contents of the retrieved file and not seeing it? (but that would be because you're not printing/sending the file back to the *web client*).

    You could always produce more debug info.

    -derby
      I have files on two different servers. The script is situated on original server, the file I am receiving on 'site.com'. I can view the situation on both servers using an ftp client. I start with no file on original server then run the script. I then take a look on the original server and find the file has been created, but that it is empty. If thre's a step that I am missing (I used the Cookbook as a basis for this) I'd be grateful for the help.

        There's nothing really wrong with your script that I can see. Are you sure the file does not have a zero byte size on site.com?

        -derby
Re: net::ftp question
by wjw (Priest) on Dec 19, 2006 at 11:52 UTC
    After checking that your original file is not in fact empty as mentioned previously, Try doing the following: <c>my $ftp = Net::FTP->new("$home, Debug => 1")<\c>

    You can then see in pretty good detail what is happening during the file transfer. That should give you confidence that the transfer is taking place, or if not, why it is not.

    The second part of your question is a bit ambiguous, so I am going to toss something out that may or may not apply. You want to read the file on the remote machine without having to retrieve the file is the gist of what I get from your statement. You might put the contents of pid.txt in your document root (or make a symbolic link to the file), then use LWP::Simple to parse the contents of that file. I think that this, or some variation will get you close to what you want. Good luck :-)

    ...the majority is always wrong, and always the last to know about it...