469,304 Members | 2,192 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,304 developers. It's quick & easy.

Need help: perl script to FTP

Here's my problem: I run a gameserver that runs the game "Medal of Honor".
On the game server is log file which contains all of the data from the
players for that day (kills, deaths, etc...). I have a perl script that runs
on my webserver, which is supposed to login to the gameserver and download
the log. The problem is that when it gets to the part where it needs to
download the file, it aborts. The gameserver FTP requires I use port 24 and
passive mode. Here's my script:

====start
#!/usr/bin/perl

##Game server IP
$ftpserver = "66.36.252.88:24";

##Login username
$ftpusername = "username";

##Login password
$ftppass = "password";

##Logfile folder on Game Server (no trailing slash)
$cwdd = "/mainta";

##Logfile name on the gameserver
$logfile = "qconsole.log";

##Logfile name saved on the webserver
$logname = "qconsole.log";

##Local path on webserver (no trailing slash)
$logpath = "/public_html/mohstats/logs";

##NO NEED TO EDIT ANYTHING BELOW THIS LINE

use Net::FTP;

if ($ftp = Net::FTP->new("$ftpserver", Debug => 0)) { print "Logging in to
server\n"; } else { print "could not find server! Exiting\n";
&send("Transfer FAILED. Could NOT connect to $ftpserver", "Transfer
FAILED"); exit; }

if ($ftp->login("$ftpusername","$ftppass")) { print "Username and Password
ACCEPTED\n"; } else { print "could not log into server with Username and
Password. Exiting!\n"; &send("Transfer FAILED. Could NOT connect to
$ftpserver with the Username And Password provided - Authentication error.",
"Transfer FAILED"); exit; }

if ($ftp->pasv) { print "Passive mode entered successfully\n"; } else {
print "Could not switch to pasive mode.\n"; }

if ($ftp->cwd("$cwdd")) { print "Changed to the directory without any
trouble - DOWNLOADING\n"; } else { print "Could not change to the
appropriate directory, uploading anyway\n"; }

if ($ftp->ascii) { print "Changed to ASCII Mode No Problem\n"; } else {
print "Could not change to ASCII mode $!\n"; exit; }

if ($ftp->get("$logfile","$logpath/$logname")) { print "Everything appears
ok with the Transfer\n"; } else { print "Can not Transfer file $!\n
EXITING\n", $ftp->message, "\n"; &send("Transfer FAILED. Could NOT Transfer
from $ftpserver. Error message returned from server is: $1", "Transfer
FAILED"); exit; }

$ftp->delete("$logfile");
$ftp->quit;

print "File Transferred OK!\nFinished\n";
====end

Here's the error I get when the script runs:

Undefined subroutine &main::send called at
/home/flot/public_html/cgi-bin/ftp.pl line 40.
Logging in to server
Username and Password ACCEPTED
Passive mode entered successfully
Changed to the directory without any trouble - DOWNLOADING
Can not Transfer file
EXITING
Cannot retrieve. Failed. Aborting

Any idea what is going wrong?

--
Visit the .:|FLOT|:. Spearhead Server at 66.36.252.88!
http://www.flotserver.net
Jul 19 '05 #1
3 15051
On Thu, 26 Aug 2004 00:21:53 -0400, FLOTServer wrote:
Here's my problem: I run a gameserver that runs the game "Medal of Honor".
On the game server is log file which contains all of the data from the
players for that day (kills, deaths, etc...). I have a perl script that runs
on my webserver, which is supposed to login to the gameserver and download
the log. The problem is that when it gets to the part where it needs to
download the file, it aborts. The gameserver FTP requires I use port 24 and
passive mode. Here's my script:

====start
#!/usr/bin/perl
use warnings;
use strict;
##Game server IP
$ftpserver = "66.36.252.88:24";

##Login username
$ftpusername = "username";

##Login password
$ftppass = "password";

##Logfile folder on Game Server (no trailing slash)
$cwdd = "/mainta";

##Logfile name on the gameserver
$logfile = "qconsole.log";

##Logfile name saved on the webserver
$logname = "qconsole.log";

##Local path on webserver (no trailing slash)
$logpath = "/public_html/mohstats/logs";

##NO NEED TO EDIT ANYTHING BELOW THIS LINE

use Net::FTP;

if ($ftp = Net::FTP->new("$ftpserver", Debug => 0)) { print "Logging in to
server\n"; } else { print "could not find server! Exiting\n";
&send("Transfer FAILED. Could NOT connect to $ftpserver", "Transfer
FAILED"); exit; }

if ($ftp->login("$ftpusername","$ftppass")) { print "Username and Password
ACCEPTED\n"; } else { print "could not log into server with Username and
Password. Exiting!\n"; &send("Transfer FAILED. Could NOT connect to
The &send() subroutine doesn't exist in your script. Did you copy the
script from somewhere? Also, '&' is unecessary, send("blah...") is
sufficient.
$ftpserver with the Username And Password provided - Authentication error.",
"Transfer FAILED"); exit; }

if ($ftp->pasv) { print "Passive mode entered successfully\n"; } else {
print "Could not switch to pasive mode.\n"; }

if ($ftp->cwd("$cwdd")) { print "Changed to the directory without any
trouble - DOWNLOADING\n"; } else { print "Could not change to the
appropriate directory, uploading anyway\n"; }

if ($ftp->ascii) { print "Changed to ASCII Mode No Problem\n"; } else {
print "Could not change to ASCII mode $!\n"; exit; }

if ($ftp->get("$logfile","$logpath/$logname")) { print "Everything appears
ok with the Transfer\n"; } else { print "Can not Transfer file $!\n
EXITING\n", $ftp->message, "\n"; &send("Transfer FAILED. Could NOT Transfer
from $ftpserver. Error message returned from server is: $1", "Transfer
FAILED"); exit; }

$ftp->delete("$logfile");
$ftp->quit;

print "File Transferred OK!\nFinished\n";
====end

Here's the error I get when the script runs:

Undefined subroutine &main::send called at
/home/flot/public_html/cgi-bin/ftp.pl line 40.
See above for problem here
Logging in to server
Username and Password ACCEPTED
Passive mode entered successfully
Changed to the directory without any trouble - DOWNLOADING
OK up to here.
Can not Transfer file
EXITING
Cannot retrieve. Failed. Aborting
Have you checked whether the file you're looking for exists? Do you have
write permission to your local directory?
Any idea what is going wrong?


Jul 19 '05 #2
"Chris Cole" <it*******@gmail.com> wrote in message
news:pa****************************@gmail.com...
#!/usr/bin/perl


use warnings;
use strict;


I assume I am just adding these 2 lines below the first line?
if ($ftp->login("$ftpusername","$ftppass")) { print "Username and Password ACCEPTED\n"; } else { print "could not log into server with Username and
Password. Exiting!\n"; &send("Transfer FAILED. Could NOT connect to


The &send() subroutine doesn't exist in your script. Did you copy the
script from somewhere? Also, '&' is unecessary, send("blah...") is
sufficient.


Yeah, I did copy it from somewhere. I'm not sure I understand your first
comment... about the $send() subroutine not existing. Can you elaborate? I'm
sorry, but I'm a big time noob when it comes to this stuff.
Can not Transfer file
EXITING
Cannot retrieve. Failed. Aborting


Have you checked whether the file you're looking for exists? Do you have
write permission to your local directory?


Yes, I do have permission to get the file and it is there. I can download it
manually with Smart FTP, but not with the perl script.

--
Visit the .:|FLOT|:. Spearhead Server at 66.36.252.88!
http://www.flotserver.net
Jul 19 '05 #3
On Thu, 26 Aug 2004 11:37:19 -0400, FLOTServer wrote:

<Followup-To set as perl.beginners>
"Chris Cole" <it*******@gmail.com> wrote in message
news:pa****************************@gmail.com...
> #!/usr/bin/perl


use warnings;
use strict;


I assume I am just adding these 2 lines below the first line?


Yes and no. Yes you can just add them in, but then your script won't work
as a whole bunch of errors will need to be addressed. It may seem like a
lot of work to get rid of the errors, but in the long run your perl
scripts will run more reliably. Read up on them.

> if ($ftp->login("$ftpusername","$ftppass")) { print "Username and Password > ACCEPTED\n"; } else { print "could not log into server with Username
> and Password. Exiting!\n"; &send("Transfer FAILED. Could NOT connect
> to


The &send() subroutine doesn't exist in your script. Did you copy the
script from somewhere? Also, '&' is unecessary, send("blah...") is
sufficient.


Yeah, I did copy it from somewhere. I'm not sure I understand your first
comment... about the $send() subroutine not existing. Can you elaborate?
I'm sorry, but I'm a big time noob when it comes to this stuff.


Let's re-format part of your script for clarity:

if ($ftp->get("$logfile","$logpath/$logname")) {
print "Everything appears ok with the Transfer\n";
} else {
print "Can not Transfer file $!\nEXITING\n", $ftp->message, "\n";
&send("Transfer FAILED. Could NOT Transfer from $ftpserver. Error
message returned from server is: $1", "Transfer
FAILED");
exit;
}

the '&send("Transfer FAILED....");' command in the else block is calling a
subroutine called send(). There should be in the script a bit of code
starting 'sub send { some code }' and which runs whenever it is run. There
isn't in what you posted and that's why you're getting one of the error
messages ('Undefined subroutine &main::send'). Obviously I've no idea what
it should be doing, but if you can't find where you copied the script from
I think it's safe to remove both the &send() commands from the script.
> Can not Transfer file
> EXITING
> Cannot retrieve. Failed. Aborting


Have you checked whether the file you're looking for exists? Do you
have write permission to your local directory?


Yes, I do have permission to get the file and it is there. I can
download it manually with Smart FTP, but not with the perl script.


No, what mean is does the script have permission to write to your
webserver in '/public_html/mohstats/logs'? Also have you checked your logs
for error messages? See google if you don't know which ones.
Jul 19 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by David K. Worman | last post: by
3 posts views Thread by xrongor | last post: by
3 posts views Thread by Sol Linderstein | last post: by
2 posts views Thread by MK | last post: by
1 post views Thread by vikjohn | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by harlem98 | last post: by
reply views Thread by harlem98 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.