Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хочу сделать, но не знаю как 
:(
    Опции темы
wolter
Дата 29.1.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Вот хочу написать такую программу которая будет работать с компа

клиенская часть:
1. Заходим в оприделенную папку(саму проверку на наличие нового файла делаем примерно каждые 5 минут)
2. смотрим если в ней появился новый фаил то
3. Поверяем устоновленно соедиение через подем с инетом и если инет вообще
4. если да то берей этот фаил и выкладым в папку на www.mysite.com/obmen
5. и отключаемся от инета (если он диалапный)
6. Если инета нет, то делаем подключение через модем и возврощяемся к 3 делаем до пункта 5
7. Опять возврощаемся к 1

Серверная часть:
1. С переодичность кадые 5 минут заходи на www.mysite.com/obmen
2. проверяем если там есть новые файлы то
3. сохронаем его на локальный диск
4. удаляем фаил с www.mysite.com/obmen
5. Опять возврощаемся к 1

 smile  smile  smile 

Буду очень признателен за пример и комеентарии к ниму

Убедительная проздба, ОТЦЫ ПЕРЛА, не судите мой вопрос сильно строго, ибо я только учусь smile , а как известно учиться лучше всего на практике.

PM MAIL   Вверх
nitr
Дата 29.1.2008, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



wolter, лучше бы разбили данный вопрос на несколько smile (т.е. вопрос = ваш пункт).
А так - очень похоже на "скрипт за деньги" ;)

Давайте по пунктам, проверка на новый файл, можно или сохранять "какие файлы в данной папке сейчас", потом сверять. Как хранить - тут тоже много советовать можем.
Установка соединения - зависит от настроек ОС. От перла только передача при соединении. А как выкладывать - можно фтп.
Практически тоже самое с серверной частью.

Добавлено через 2 минуты и 50 секунд
P.S.: читайте правила форума, тема должна отражать суть вопроса. А у вас...


--------------------
PM   Вверх
wolter
Дата 29.1.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Цитата(nitr @ 29.1.2008,  22:42)
wolter, лучше бы разбили данный вопрос на несколько smile (т.е. вопрос = ваш пункт).
А так - очень похоже на "скрипт за деньги" ;)

Давайте по пунктам, проверка на новый файл, можно или сохранять "какие файлы в данной папке сейчас", потом сверять. Как хранить - тут тоже много советовать можем.
Установка соединения - зависит от настроек ОС. От перла только передача при соединении. А как выкладывать - можно фтп.
Практически тоже самое с серверной частью.

Добавлено @ 22:45
P.S.: читайте правила форума, тема должна отражать суть вопроса. А у вас...

Отражаю суть вопросОВ

1 как перл заставить поднить инет по диалапу и соответсвенно отключаться от него под ВинХР???
2. как заставить перл допустим по ФТП заходить в определенную попку на хосте и смотреть повился там фаил и евляеться ли он свежим если да да как его оттуда забрать себе на комп???
3 опять же как фаил при помощи перла залить на хост по фтп протаколу?
Ну пока остоновися на этих трех вопросах )
Почему мой первый вориант разложен так по пунктам
потому что я решил задать все интиресуещие меня вопросы в одной темы а не развозить их на 5 разных тем.

Это сообщение отредактировал(а) wolter - 29.1.2008, 23:16
PM MAIL   Вверх
GeoGeo
Дата 29.1.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 26.1.2008

Репутация: нет
Всего: нет



Что знаю , то отвечу , а вдруг поможет ;)

Код

3 опять же как фаил при помощи перла залить на хост по фтп протаколу?


Код

use Net::FTP;

$ftp = Net::FTP->new("ftp.myhost.ru", Debug => 0);   # открываем фтп
$ftp->login("LOGIN","PASSWORD") or die $ftp->message ; #Логинимся
$ftp->cwd("/obmen");  # Переходим в папку obmen
$ftp->put ("local_file","destination_file"); #что заливать , под каким именем залить.
$ftp->quit; # Прощаемся с сервером.


PM MAIL   Вверх
nitr
Дата 29.1.2008, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



1. настраивается ОС, а не перл
2. разные способы есть, сейчас модули не приведу какие использовать, но можно, например, мд5 хеш хранить по каждому файлу.
3. можно использовать пример выше, а так perldoc Net::FTP



--------------------
PM   Вверх
wolter
Дата 30.1.2008, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Цитата(GeoGeo @ 29.1.2008,  23:44)
Что знаю , то отвечу , а вдруг поможет ;)

Код

3 опять же как фаил при помощи перла залить на хост по фтп протаколу?


Код

use Net::FTP;

$ftp = Net::FTP->new("ftp.myhost.ru", Debug => 0);   # открываем фтп
$ftp->login("LOGIN","PASSWORD") or die $ftp->message ; #Логинимся
$ftp->cwd("/obmen");  # Переходим в папку obmen
$ftp->put ("local_file","destination_file"); #что заливать , под каким именем залить.
$ftp->quit; # Прощаемся с сервером.


Огромное СПАСИБО, вот это человек действительно помог  пример показал еще и закомментировал, еще раз спасибо тебе огромное

теперь есть еще 2 вопроса, как фаил удалить, а как проверить есть ли он там и как довно он там лежит ?
PM MAIL   Вверх
fray
Дата 30.1.2008, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 7.6.2007

Репутация: 0
Всего: 0



Извените за невтему, хочу всё и сразу smile
PM MAIL   Вверх
wolter
Дата 30.1.2008, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Цитата(nitr @ 29.1.2008,  23:55)
1. настраивается ОС, а не перл
2. разные способы есть, сейчас модули не приведу какие использовать, но можно, например, мд5 хеш хранить по каждому файлу.
3. можно использовать пример выше, а так perldoc Net::FTP

1. Приведу пример, допустим выполняеться скрипт, он смотрит в папку на локальном диске и если видет там новый файлы ТО, ПОДКЛЮЧАЕТЬСЯ К НЕТУ, ПРОВЕРЯЕТ, ЕСТЬ ЛИ ИНЕТ, А ПОТОМ ОТСЫЛАЕТ ФАЙЛ И ОТКЛЮЧАЕТЬСЯ ОТ НЕТА.
2. А можно более подробнее (свежость файлов надо будет проверять и на локальном диске и на хосте по фтп)
3  Огромное спасибо GeoGeo этот вопрос решили, теперь как их оттуда удалять (чтени док по модулям даеться мне очень туго smile )

Добавлено через 12 минут и 16 секунд
Ура!!!
Я всетоки нашел в доке модуля как удолить фаил по фтп
PM MAIL   Вверх
KSURi
Дата 30.1.2008, 04:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Цитата(wolter @  30.1.2008,  00:32 Найти цитируемый пост)
1. Приведу пример, допустим выполняеться скрипт, он смотрит в папку на локальном диске и если видет там новый файлы ТО, ПОДКЛЮЧАЕТЬСЯ К НЕТУ, ПРОВЕРЯЕТ, ЕСТЬ ЛИ ИНЕТ, А ПОТОМ ОТСЫЛАЕТ ФАЙЛ И ОТКЛЮЧАЕТЬСЯ ОТ НЕТА.


Имхо подключение/отключение реализуемо только на WinAPI. MSDN и Win32::API тебе в помощь)

Спросил у знакомого программиста, итак, в какую сторону тебе ковырять:
  • Ф-ии ответственные за операции с диалапом находятся в библиотеке rasapi.dll, прототипы ф-ий можно найти в заголовке ras.h
  • Проверить наличие активного соединения тебе поможет ф-ия BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved);.
Ниже пример в принципе тоже самое сделает, грубо говоря, но не так элегантно имхо) :
Код

use LWP::Simple;
print 'Connected to Internet' if head 'http://www.ru';

Теперь по поводу определения новых локальных файлов: писал я когда-то скрипт, который тоже должен был выполнять такой функционал. Собственно вырезка из моего кода (я там лишнее повырезал, но часть пришлось оставить в сабе startScan, чтобы смысл сохранить):
Код

# Функция создание таблицы хэшей
sub buildHashTable
{
    my $current = shift || $ROOT;
    
    # Рекурсивный обход всех директорий и файлов начиная с $ROOT
    opendir(DIR, $current) || die $!;
    while(my $entry = readdir DIR)
    {
        # Отбрасывание ненужных файлов
        next if $entry eq '.' || $entry eq '..';
        
        my $subCurrent = $current . _slash() . $entry;
        buildHashTable($subCurrent) if -d $subCurrent;
        
        # Записать пару файл=>хэш в файл-базу
        print BASE $subCurrent, '=>', calculateHash($subCurrent), "\n" if -f $subCurrent;
        next;
    }
    close DIR;
    
    1;
}

sub startScan
{
    my $path = shift || $ROOT;
    
    my $retval = 0;
    
    # Загружаем базу файлов
    loadHashTable(\my %base);
    
    # Рекурсивный обход всех директорий и файлов начиная с $ROOT
    opendir(DIR, $path) || die $!;
    while(my $entry = readdir DIR)
    {
        next if $entry eq '.' || $entry eq '..';
        
        my $subCurrent = $path . _slash() . $entry;
        startScan($subCurrent) if -d $subCurrent;
        
        # Если текущий хэш файла не соответсвует хэшу из базы, (т.е. файл изменен)
        # выполняем действие в зависимости от выбранной политики
        if(exists $base{$subCurrent})
        {
            unless($base{$subCurrent} eq calculateHash($subCurrent))
            {
                $retval++;
                &$ACTION($subCurrent);
            }
        }
        # Если файла нет в таблице -
        # выполняем действие в зависимости от выбранной политики
        else
        {
            $retval++;
            &$ACTION($subCurrent);
        }
    }
    close DIR;
    
    $retval;
}

sub calculateHash
{
    my $name = shift;
    
    open(FILE, $name) || die $!;
    binmode FILE;
    my $hash = Digest::MD5 -> new -> addfile(*FILE) -> hexdigest;
    close FILE;
    
    $hash
}

sub _slash { return $^O eq 'MSWin32' ? '\\' : '/' }

Определять новые файлы на удаленном FTP можно парсингом ответа метода ls из модуля Net::FTP.

Думаю все)

Это сообщение отредактировал(а) KSURi - 30.1.2008, 18:47


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
wolter
Дата 30.1.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Честно. сказать, я не понял, как при помощи перла сделать диалап соединение, проверят работает ли оно, если не состялся дозвон то опять перезвонить и как потом его отключить

Можно подробнее об этом коде
use LWP::Simple;
print 'Connected to Internet' if is_success head 'www.ru';

Я только недавно начал, точнее сказать ПЫТАЮСЬ писать на перле, как я понял язык этот фактически безграничен smile 


И где мне найти библиотеку rasapi.dll
на копе, в стандартной поставке винды у меня ее нет

Это сообщение отредактировал(а) wolter - 30.1.2008, 10:38
PM MAIL   Вверх
wolter
Дата 30.1.2008, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Попробовал вот такой код для дозвона
Код

  use Win32::API;
  $function = Win32::API->new(
      'rasapi.dll', 'sum_integers', 'II', 'I',
  );
  $return = $function->Call(3, 2);


Но не работает
PM MAIL   Вверх
Bulat
Дата 30.1.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



wolter, боюсь, что чем дальше, тем больше вопросов, и больше неработающих и неверно работающих кусков кода.

Во-первых Линкольн Д. Штайн "Разработка сетевых программ на Perl" тебе в помощь. А вот уже если и после этого + периодического копания в ресурсах интернета, дабы найти ответ на вопрос, что-то не будет получатся, то можно разобратся что и почему smile




--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
wolter
Дата 30.1.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Цитата(Bulat @ 30.1.2008,  11:53)
wolter, боюсь, что чем дальше, тем больше вопросов, и больше неработающих и неверно работающих кусков кода.

Во-первых Линкольн Д. Штайн "Разработка сетевых программ на Perl" тебе в помощь. А вот уже если и после этого + периодического копания в ресурсах интернета, дабы найти ответ на вопрос, что-то не будет получатся, то можно разобратся что и почему smile

Я понимаю что для Вас, проше всего меня культурно послать чем что чемто мне помочь, но Вы учтите тот небольшой факт, что я пришел сюда с вопрос уже ПОСЛЕ того как копался в нете и в перл доках (хотя английский я не знаю и что то понять там мне довольно сложно) и увидим что самостоятельно я с данным вопросом не спарвлюсь пришел уже сюда.
PM MAIL   Вверх
Bulat
Дата 30.1.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



wolter, все твои пункты из первого топика - функциональности, возможно на каждый из них многие смогут привести огромное количество примеров, но чтоб написать целостную программу нужно продумать ее логически. Дело не в "послать", а в том что тебя интересует лишь функциональность, сорри за тавтологию, поэтому тебе сложно разобратся со этими вопросами исходя из всего ресурса который есть в интернете. Лично я могу сказать, что большинство из написанного тобой в первом топике легко можно реализовать, если смотреть не только примеры, но еще и читать весь текст который вокруг. Но на это нужно время smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
wolter
Дата 30.1.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Bulat, Я ниже отписал интиресующие меня вопросы, а именно
1. Как на ВинХр  при помощи перла поднять диалп соидинение с нетом, как его проверить и как отключиться от него
2. Как Проверить "новизну" файла на хосте через фтп и на локальном компьютере 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0949 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.