Автор Тема: Perl ftp tutorial, static blog site  (Прочетена 2063 пъти)

PhrozenCrew

  • Напреднали
  • *****
  • Публикации: 51
    • Профил
Perl ftp tutorial, static blog site
« -: May 02, 2006, 21:09 »
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 сървар '<img'>. Аз лично не знам друг език, който толкова елегантно и ясно да направи това. Като се зачетете в кода може наистина да усетите какво означават думите на 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\*.*''<img'>) { # ако сте под Windows
$ftp->put($_);
}
@files=$ftp->dir or $newerr=1;

Използвах папката блог, защото ми дойде на ум, че така можете да си направите собствен статичен блог сайт който да оновявате по много лесен начин '<img'>). Много Хитро, нали. А има блогерски програми, които ви карат да плащата сума левчета за да им ползвате тъпнята, която д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, заменете ги ръчно с кавички под английска клавиатура.
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Tutorial for kernel options
Настройка на програми
HipHop 0 2963 Последна публикация Mar 12, 2002, 21:49
от HipHop
debian site haknat !!!
Общ форум
kennedy 1 2221 Последна публикация Jul 05, 2003, 17:58
от mironcho
blog
Web development
Йордан 7 3553 Последна публикация May 27, 2004, 17:35
от Йордан
htaccess tutorial
Настройка на програми
marteen 1 2295 Последна публикация Jan 10, 2005, 14:02
от
[tutorial] CRUX installation
Настройка на програми
clovenhoof 13 4123 Последна публикация Nov 30, 2012, 09:48
от clovenhoof