Yesterdayโs Python ftp Primer Tutorial is given a โreturn of the Three Psโ feel today. Yes, we code some Perl to do similar ftp listing logic as we did with Python yesterday, so that โฆ
- PHP supervises
ftp listing functionality provided by either โฆ
- Python โฆ or โฆ
- Perl โฆ and this new Perl code is โฆ
#!/usr/bin/perl
# ftp_url.pl
# Ftp URL listing
# RJM Programming
# November, 2017
# Thanks to https://www.foo.be/docs/tpj/issues/vol1_3/tpj0103-0007.html
use Net::FTP;
#use File::Listing qw(parse_dir);
# Create a new connection to the ftp server
sub connection { # Create a new NET::FTP object
$ftp = Net::FTP->new($CPANhost, Timeout => 60)
or die "Can't contact $CPANhost: $!";
# We shall login to the ftp server as anonymous;
$ftp->login($CPANusername,$CPANpassword)
or die "Can't login ($CPANhost):" .
$ftp->message;
# Change the working directory
$ftp->cwd($CPANpath) or die
"Can't change directory ($CPANhost):".
$ftp->message;
return $ftp;
}
# The path to the CPAN/modules directory on most CPAN hosts
$CPANpath = '/';
$CPANusername = 'mkuulma@ozemail.com.au';
$CPANpassword = '';
# Change this to the name of your nearest CPAN host
$CPANhost = '';
my $size = @ARGV;
if ($size == 2) {
$CPANhost = 'ftp.ozemail.com.au';
$CPANpath = $ARGV[1];
$CPANpassword = $ARGV[0];
} else {
if ($size == 1) {
$CPANhost = 'ftp.ozemail.com.au';
$CPANpassword = $ARGV[0];
} else {
if ($size == 3) {
$CPANhost = $ARGV[0];
$CPANusername = $ARGV[1];
$CPANpassword = $ARGV[2];
} else {
if ($size == 4) {
$CPANhost = $ARGV[0];
$CPANusername = $ARGV[1];
$CPANpassword = $ARGV[2];
$CPANpath = $ARGV[3];
} else {
print "Usage is via ... perl ftp_url.pl [ftphost=ftp.ozemail.com.au] [ftpusername=mkuulma@ozemail.com.au] ftppassword [subpath=/]\n";
}
}
}
}
if ($CPANpassword eq '') {
$CPANpassword = '';
} else {
# Create the initial connection
$ftp = connection();
$ftp->pasv(); # passive mode
# Retrieve a recursive directory listing
my @ls = $ftp->ls('-l');
for my $filex (@ls) {
my $file = $filex;
my (@description, $size);
if (-e $file) {
push @description, 'binary' if (-B _);
push @description, 'a socket' if (-S _);
push @description, 'a text file' if (-T _);
push @description, 'a block special file' if (-b _);
push @description, 'a character special file' if (-c _);
push @description, 'a directory' if (-d _);
push @description, 'executable' if (-x _);
push @description, (($size = -s _)) ? "$size bytes" : 'empty';
push @description, (($daysago = -M _)) ? " modified $daysago days ago" : '';
print "\n\t$file is ", join(', ',@description),"";
}
}
print "\n\t";
}
โฆ or you can download it as ftp_urlpl (supervised by ftp_url
php changed in thisway, where you may notice multiple HTML input type=submit buttons used to differentiate the two strands of ftp functionality modes).
With this Perl coding we again use command line arguments as the technique to handle user defined data to define the ftp connection.
Think server side languages, think โThe Three Psโ!
Previous relevant Python ftp Primer Tutorial is shown below.
Python is a great server side language to learn. Some web server configurations use it as their โgo toโ server language, though ours here at rjmprogramming.com.au uses PHP (and so weโve written a PHP โsupervisorโ to dovetail with todayโs Python code).
Weโre going to write this Python code, that facilitates the listing of an ftp URL โpathโ, to run as if from a Linux (or Mac OS X, which we tested with for the work today) command line.
So, underlying the PHP supervisory liverun today, the hard working โduck childโ Python goes like โฆ
"""
ftp_url.py - RJM Programming - November 2017
Show some ftp functionality ... thanks to Python & XML by O'Reilly ISBN: 0-596-00128-2
"""
import sys
from urllib import urlopen
def main(argv):
if len(sys.argv) == 5:
fd=urlopen("ftp://" + sys.argv[2] + ":" + sys.argv[3] + "@" + sys.argv[1] + sys.argv[4])
else:
if len(sys.argv) == 4:
fd=urlopen("ftp://" + sys.argv[2] + ":" + sys.argv[3] + "@" + sys.argv[1])
else:
if len(sys.argv) == 3:
fd=urlopen("ftp://mkuulma@ozemail.com.au:" + sys.argv[1] + "@ftp.ozemail.com.au" + sys.argv[2])
else:
if len(sys.argv) == 2:
fd=urlopen("ftp://mkuulma@ozemail.com.au:" + sys.argv[1] + "@ftp.ozemail.com.au")
else:
print "Usage is via ... python ftp_url.py [ftphost=ftp.ozemail.com.au] [ftpusername=mkuulma@ozemail.com.au] ftppassword [subpath=/]"
exit()
print fd.read()
exit()
if __name__ == "__main__":
main(sys.argv[1:])
โฆ or you can download it as ftp_urlpy (supervised by ftp_url
php).
Interesting, huh?!
If this was interesting you may be interested in this too.
If this was interesting you may be interested in this too.