Perl FTP tutorial, static blog site
Свързване с FTP сървар през Perl, създаване на статичен блог сайт
Ето и идеята на програмирането за FTP под Perl. На първо място е необходимо да се регистрирате в някой free сървар за да си получите безплатното интернет пространство. Такива сървари с лопата да ги ринеш в БГ – hit.bg, bol.bg(казват ,че е видим от цял свят), centrum-group.com и още знайни и незнайни. След като вече имате акаунт към някой от фрее сърварите е добре да знаете как да се свържете с него. Ако сте си направили акаунт например към free.techno-link.com и името на акаунта ви е pen4o, а паролата pencho17, тогава значи за да се свържете ще трябва да стартирате някой FTP клиент и данните за връзка ще са:
ftp pen4o.centrum-group.com
user: pen4o
pass: pencho17
Направете си директория tutorials на този адрес и сложете някакви файлове в нея. Например: Perl_FTP_Tutorial.pdf и my_CV.doc
Пиша тези неща за да ми е по лесно по-късно в тутора. Приемам , че вече сте си изтеглили Perl. Аз ползвам Perl 5.6. В тази дистрибуция е включен необходимия ни за работа модул NET::FTP. Да преминем директно към същността. Ще напиша скрипта и ще го коментирам между редовете. Така мисля, че ще ви е по-ясно. Скрипта по долу можете да го напишете в най-обикновен текстов редактор, например Notepad (има го във всички Windows или cat – всички Linux, Unix), и го съхранете като PerlFTP.pl
#!/usr/bin/perl
use Net::FTP; # да заредим модула, който ни трябва
my $host="pen4o.centrum-group.com"; #FTP сървара ви
my $directory="tutorials"; # някоя от директориите
# нека създадем една ftp връзка
$ftp=Net::FTP->new($host,Timeout=>240) or $newerr=1;
# нека направим семпла проверка за грешки и да изкараме
# съобщение, ако има такива
# с push добавяме грешката към масив @ERRORS
push @ERRORS, "Can't ftp to $host: $!\n" if $newerr;
# стартиране на подпрограмата за грешки, ако има такива
myerr() if $newerr;
# ако всичко е нормално
print "Connected\n";
# сега нека да се логнем в сървара
$ftp->login("pen4o","pen4o17") # логваме се с нашите данни
or $newerr=1; # проверка дали сме логнати
# да изпише съобщение когато се свържем
print "Getting file list";
# отново да проверим за грешка
# и да излезем от сървара ако има такава
push @ERRORS, "Can't login to $host: $!\n" if $newerr;
$ftp->quit if $newerr;
myerr() if $newerr;
# ако всичко е нормално
print "Logged in\n";
$ftp->cwd($directory) # нека да идем директно в директорията,
# която искахме по-горе – tutorials
or $newerr=1; # отново да проверим за грешка
# нека скрипта да ни изпише нещо ако
# намери грешка в името на директорията или друга
push @ERRORS, "Can't cd $!\n" if $newerr;
myerr() if $newerr;
# разкачи връзката ако има грешка
$ftp->quit if $newerr;
# да зададем команда на FTP сървара
# в случая аз си избирам ‘dir’, но може да е всяка
# друга команда която поддържа този FTP сървар
@files=$ftp->dir
# нова проверка за грешки
or $newerr=1;
# нека изпечата съобщение за грешката
# с push добавяме грешката към масив @ERRORS
push @ERRORS, "Can't get file list $!\n" if $newerr;
myerr() if $newerr;
# ако всичко е ок нека видим файловете в директорията
print "Got file list\n";
foreach(@files) # правим листата с файловете на масив @files
{
print "$_\n"; # принтваме на екрана файл по файл
# със специалната променлива на Perl,
# която обслужва елементи на масиви
}
# след като сме изпечатали всичко, което ни е необходимо
# излизаме нормално от сървара
$ftp->quit;
# нека да създадем подпрограмата за грешки,
# за която споменах по-горе
sub myerr {
print "Error: \n";
print @ERRORS;
exit 0;
}
Уххх, че много коментари! Да вземем малко да ги делнем а ?? И да видим как би изглеждал скрипта:
#!/usr/bin/perl
use Net::FTP;
my $host="pen4o.centrum-group.com";
my $directory="tutorials";
$ftp=Net::FTP->new($host,Timeout=>240) or $newerr=1;
push @ERRORS, "Can't ftp to $host: $!\n" if $newerr;
myerr() if $newerr;
print "Connected\n";
$ftp->login("pen4o","pen4o17") or $newerr=1;
print "Getting file list";
push @ERRORS, "Can't login to $host: $!\n" if $newerr;
$ftp->quit if $newerr;
myerr() if $newerr;
print "Logged in\n";
$ftp->cwd($directory) or $newerr=1;
push @ERRORS, "Can't cd $!\n" if $newerr;
myerr() if $newerr;
$ftp->quit if $newerr;
@files=$ftp->dir or $newerr=1;
push @ERRORS, "Can't get file list $!\n" if $newerr;
myerr() if $newerr;
print "Got file list\n";
foreach(@files) { print "$_\n"; }
$ftp->quit;
sub myerr {
print "Error: \n";
print @ERRORS;
exit 0; }
Мдам, на 28 реда събрахме програмка, която прави всички проверки за грешки и прави някакви мизерии в FTP сървар
'>. Аз лично не знам друг език, който толкова елегантно и ясно да направи това. Като се зачетете в кода може наистина да усетите какво означават думите на Larry Wall (създателя на Perl), който казва: “Пърл е като говоримите езици – рационален, простичък и невероятно богат откъм изразни средтва..”.
Нека ви дам една идея. Можете да накарате този скрипт да прави backup на важните ви файлове които сте поставили в някоя директория или по-точно да съхраните данните(файлове, които е добре да бъдат защитени по някакъв начин – например като архиви или PDF-и с парола) в internet пространството. Нека погледнем реда :
@files=$ftp->dir or $newerr=1;
Спокойно можете да използвате не ‘dir’, а някоя друга команда (put, get ...). Да видим как се прави това. Първо е добре да познавате FTP командите които ви позволява вашия сървар. Всички FTP сървари позволяват командата put. Това е команда с която казвате на сървара да качи някой файл от хард диска ви на FTP директорията ви.
Аз заменям:
@files=$ftp->dir or $newerr=1;
със:
$blog = 'C:\blog\index.html'; # ако сте под Windows
$ftp->put($blog) or $newerr=1;
@files=$ftp->dir or $newerr=1;
Така качихме файл на FTP сървара ни. Ако искате да качите всички файлове от директорията:
C:\blog
Можете да го направите като замените горните редове така:
for (glob('C:\blog\*.*'
'>) { # ако сте под Windows
$ftp->put($_);
}
@files=$ftp->dir or $newerr=1;
Използвах папката блог, защото ми дойде на ум, че така можете да си направите собствен статичен блог сайт който да оновявате по много лесен начин
'>). Много Хитро, нали. А има блогерски програми, които ви карат да плащата сума левчета за да им ползвате тъпнята, която дoри не знаете какво прави с вашите данни. Да е жива и здрава идеята OpenSource.
Тъй като сайто може да промени символите от кода прилагам тутора като PDF тук:
http://nediko.fortunecity.com/perl/Perl_Net_FTP_tutorial_ned.zipИ целия код с блогерската програмка тук:
http://nediko.centrum-group.com/Program....erl.zipНе забравяйте да експериментирате. Например добре би било да изтривате качените файлове за да не ги чакатe да се качат отново и да не ви объркват. Файловете с Perl се изтриват с командата unlink. Пример:
unlink "index.html";
Можете да замените еденичните кавички с двойни, но тогава внимавайте с шпациите в файловете. Ще трябва да използвате двойно наклонени черти. Пример:
for (glob("C:\\blog\\*.*")) { # ако сте под Windows
$ftp->put($_);
}
@files=$ftp->dir or $newerr=1;
Айде стига толква. Perl е толкова лесен и необятен, че човек като почне да пише за него и няма спирачки. Дано ви хареса тутора. В следващия тутор може да закачим и малко сериозното програмиране с Perl, макар, че с тоя език няма сериозност, всичко става като на майтап. Все пак не се заблуждавайте, всички C unix/linux гурота ползват доволно Perl като алтернативен език.
ПС: Не забравяйте да смените сървара с вашия и да си попълните всички ваши данни. Скриптовете са тествани и работят с:
perl, v5.6.1 built for MSWin32-x86-multi-thread
Видях, че има проблеми с копирането на кавичките в PDF-a, заменете ги ръчно с кавички под английска клавиатура.