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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Net::FTP меняет время изменения файла 
:(
    Опции темы
Гость_finder
Дата 26.11.2005, 20:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Необходимо обеспечить ежедневное обновление некой программы с ftp сервера,
проблема заключается в следующем:

use Net::FTP;
...
$ftp->get('somefile','somefile') || die " Cannot copy somefile", $ftp->message;

копирует файл, но меняет время последненго изменения файла на момент копирования, программа оказалась чувствительна к этому и не хочет работать (если копировать вручную с помощью FAR все замечательно, время изменения остается тем же какое было на ftp),
есть ли какое-либо решение этой проблемы средствами Perl?

  Вверх
Kiber_rat
Дата 27.11.2005, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MACMANIAC
**


Профиль
Группа: Участник
Сообщений: 276
Регистрация: 18.4.2002
Где: Ashdod, Israel

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



Запомни время модификации файла на сервере в какую-нибудь переменную, а потом установи его на локальном файле после загрузки...
Код

my $modtime = $ftp->mdtm('somefile');



--------------------
Best regards!                                                             
@..@_____Ku6ep
=*=______\______KPbIC
Код
print join "",map{chr}(split/(\w{2})/,hex(int(2175.57302796298**2)))
PM WWW ICQ Skype Jabber YIM   Вверх
Гость_finder
Дата 27.11.2005, 11:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Kiber_rat
к сожалению, сервер не поддерживает функцию mdtm, она возвращает время с произвольным смещением и тест:

print "Ok\n" if ($ftp->supported('mtdm'));

не проходит
  Вверх
Kiber_rat
Дата 27.11.2005, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MACMANIAC
**


Профиль
Группа: Участник
Сообщений: 276
Регистрация: 18.4.2002
Где: Ashdod, Israel

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



А ты коннектишься в active или passive режиме? Попробуй с этим поиграться...


--------------------
Best regards!                                                             
@..@_____Ku6ep
=*=______\______KPbIC
Код
print join "",map{chr}(split/(\w{2})/,hex(int(2175.57302796298**2)))
PM WWW ICQ Skype Jabber YIM   Вверх
Гость_finder
Дата 29.11.2005, 08:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Kiber_rat
С запуском программы проблема решена, забыл указать: $ftp->binary;
а вот насчет времени последнего изменения файлов пока ничего не получается, пробовал и в active или passive режимах, приходится закачивать все подряд и принудительно обновлять каждый день, вне зависимости от переодичности обновления исходника
  Вверх
sharq
Дата 29.11.2005, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

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



Цитата
к сожалению, сервер не поддерживает функцию mdtm, она возвращает время с произвольным смещением и тест:

print "Ok\n" if ($ftp->supported('mtdm'));

не проходит


А причем здесь это? Такой команды нет!

mtdm - это метод модуля Net::FTP v. 2.75

Код

sub mdtm
{
 my $ftp  = shift;
 my $file = shift;

 # Server Y2K bug workaround
 #
 # sigh; some idiotic FTP servers use ("19%d",tm.tm_year) instead of 
 # ("%d",tm.tm_year+1900).  This results in an extra digit in the
 # string returned. To account for this we allow an optional extra
 # digit in the year. Then if the first two digits are 19 we use the
 # remainder, otherwise we subtract 1900 from the whole year.

 $ftp->_MDTM($file) && $ftp->message =~ /((\d\d)(\d\d\d?))(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/
    ? timegm($8,$7,$6,$5,$4-1,$2 eq '19' ? $3 : ($1-1900))
    : undef;
}


Тебе фактически нужна функция timegm, хотя используй лучше метод!

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
finderknowledge
Дата 29.11.2005, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



sharq
Цитата
А причем здесь это? Такой команды нет!

Такая команда имеется в Net::FTP:
Цитата
supported ( CMD ) Returns TRUE if the remote server supports the given command.


только я ошибся в аргументах, правильно так:
Код

print "Ok\n" if ($ftp->supported('MDTM'));

тогда тест проходит,
Цитата
Syntax: MDTM remote-filename
Returns the last-modified time of the given file on the remote host in the format "YYYYMMDDhhmmss": YYYY is the four-digit year, MM is the month from 01 to 12, DD is the day of the month from 01 to 31, hh is the hour from 00 to 23, mm is the minute from 00 to 59, and ss is the second from 00 to 59.


http://www.nsftools.com/tips/RawFTP.htm

В модуле Net::FTP за вызов этой команды отвечает функция:
Код

sub _MDTM { shift->command("MDTM",@_)->response() == CMD_OK } 


проблема заключается в том, что она возвращает не совсем верные данные, или я, может быть чего-то не понимаю:
проверяю файл file.exe, время последнего изменения 11.10.2004 0:00
Код

$ftp->_MDTM('file.exe');
print $ftp->message;

выдает 20041011115650, т.е. 11.10.2004 11:56, разница почти в 12 часов
следующий файл file.xls. время последнего изменения 09.11.2005 7:13
Код

$ftp->_MDTM('file.xls');
print $ftp->message;

выдает 20051109071321, т.е. верное,

в чем может быть причина такого разнобоя?

Модератор: Используй кнопочку код для вставки листинга кода. Будет легче читаться.

Это сообщение отредактировал(а) sharq - 29.11.2005, 15:13
PM MAIL   Вверх
sharq
Дата 29.11.2005, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

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



Цитата(finderknowledge @ 29.11.2005, 14:56)
только я ошибся в аргументах, правильно так:

именно про это я тебе говорил. Молодец, что тоже порылся в исходнике. smile

Цитата(finderknowledge @ 29.11.2005, 14:56)
проблема заключается в том, что она возвращает не совсем верные данные

проверь еще, поэкспериментируй.

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Kiber_rat
Дата 29.11.2005, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MACMANIAC
**


Профиль
Группа: Участник
Сообщений: 276
Регистрация: 18.4.2002
Где: Ashdod, Israel

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



Этод метод возвращает дату последней модификации файла, а то что ты смотришь это тоже дата модификации или дата создания?


--------------------
Best regards!                                                             
@..@_____Ku6ep
=*=______\______KPbIC
Код
print join "",map{chr}(split/(\w{2})/,hex(int(2175.57302796298**2)))
PM WWW ICQ Skype Jabber YIM   Вверх
finderknowledge
Дата 30.11.2005, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Kiber_rat
Дата модификации, если верить Far и Explorer
PM MAIL   Вверх
Sadok
Дата 30.11.2005, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Гость_finder
Цитата
Необходимо обеспечить ежедневное обновление некой программы с ftp сервера,
проблема заключается в следующем:

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


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

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


 




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


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

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