Титла: Perl ftp tutorial, static blog site Публикувано от: PhrozenCrew в 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 сървар . Аз лично не знам друг език, който толкова елегантно и ясно да направи това. Като се зачетете в кода може наистина да усетите какво означават думите на 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, заменете ги ръчно с кавички под английска клавиатура. |