| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Обновление архивов |
| Автор: Гость_Alex 22.5.2005, 06:29 |
| Не подскажете как отследить обновление архивов? Периодическая закачка с помощью LWP и сравнение размеров файлов не подойдет... (Архивы могут быть достаточно большими) Можно ли как-нибудь получить время модификации архива? |
| Автор: korob2001 22.5.2005, 09:42 |
| Что ты подразумеваешь под словом архив??? |
| Автор: Гость_Alex 22.5.2005, 22:10 |
| *.zip *.rar На данный момент меня интересуют файлы указанных форматов. Хотя вопрос можно и обобщить. В общем случае это может относиться и к фаилам *.mp3 и т.д (размеры которых в среднем от 500К и выше). Маленькие файлы, в крайнем случае, можно периодически заливать к себе и сравнивать размеры старого и нового. Хотя это тоже не самый лучший выход. А как поступить с большими файлами (меня интересуют файлы до 5 метров)? Здесь начинаешь ценить время с учетом последующей обработки и ограничения на время работы скрипта. Плюс (возможно) оплата трафика. Тогда уж точно часто закачивать большие файлы не получится... |
| Автор: korob2001 22.5.2005, 22:59 | ||
Попробуй это:
В переменной будет сохранено время в секундах с начала эпохи, последней модификации файла. |
| Автор: Гость_Alex 23.5.2005, 07:58 | ||
| Я так уже пробовал Так можно отследить только время модификации своих файлов (на своем компе или в домене, если запустить там же скрипт) А мне надо узнать время модификации файлов независимо от того, где они лежат... Может, правда, я что-то не так делаю, но
ничего не выдает |
| Автор: korob2001 23.5.2005, 14:08 |
| Хех |
| Автор: Гость_Alex 23.5.2005, 22:55 | ||||||
В принципе ведь можно посмотреть время модификации файлов, если загружать их не в лоб, а, например, указав в строке адреса браузера только путь к папке. Разумеется, если доступ открыт. Значит должно быть возможно получение этого времени программно.
Хочу сделать что-то вроде сборника прайс-листов. Вернее работа уже идет. Теперь понемногу оптимизирую код.
Наверняка есть. Только я до него пока не дошел. Причем есть по крайней мере один сайт по такой же тематике. Там ребята размахнулись не по-детски. Уже пару лет как с этим работают. У меня запросы поскромнее - немного другие планы на это, но как знать |
| Автор: korob2001 24.5.2005, 02:32 | ||||
http://host.ru/struct/archive/ Это ещё не значит что ты обращаешься к каталогу, просто сервер настроен так, что когда ты указываешь такой путь, то запускается определённый скрипт, который тебе и выдаёт информацию. Это делается как правило, что бы скрыть пути такого вида: http://host.ru/struct/erchive/archive.pl?id=021242&sid=1245145633&act=show Причины для такого сокрытия могут быть разные. Вобщем папка не вернёт тебе время обновления архивов, которые находятся в ней. Или я тебя не допонял или ты не допояснил задачи.
Т.е. ты грузишь архивы на сервер. Наверное для того, что бы потом можно было их как-то оттуда скачать??? Если да, то ты должен их как-то выводить, например в html код, где юзер может нажать на ссылку и скачать архив. Как правило, это делает программа написанная на серверном языке: Perl, PHP, ASP и т.д. Вот она, при генерации ссылок пусть и узнаёт время последнего обновления архива и выдаёт его на той же странице. Или я опять не верно понимаю??? |
| Автор: Sadok 24.5.2005, 08:47 |
| Я думаю, wget (возможно curl, не работал с ним) спасет отца русской демократии. Тут же надо анализировать ответы серера (Last-modified, например) |
| Автор: wladk 24.5.2005, 11:22 | ||
| Пример из книги Network Programming with Perl http://www.modperl.com/perl_networking/
Делает, помоему, то что тебе надо, закачивает документ с сервера на локальную машину, если только документ на серверее имеет более позднюю дату изменения, чем локальный. |
| Автор: Гость_Alex 24.5.2005, 23:04 | ||||
Если указать данный путь, выдается что-то вроде Name Last modified Size Description -------------------------------------------------------------------------------- Parent Directory 12-May-2005 06:22 - f1.htm 18-May-2005 08:00 22k f10.htm 18-May-2005 08:00 24k f11.htm 18-May-2005 08:00 24k .................................................................
Я гружу их на сервер, потом парсю и оставляю в *.csv формате для запросов пользователей... На счет последующих советов - большое спасибо, попробую, может что-нибудь да выйдет... Если нет, еще раз к Вам обращюсь |
| Автор: Гость_Alex 26.5.2005, 18:33 | ||
На счет первого совета:
Скорее всего не спасет Я еще с ним не возился, хотя судя по возможностям (сегодня просмотрел документацию) полезная программка. Однако есть два нюанса: 1) при проверке обновления он сравнивает дату сохраненного файла и закачиваемго. Таким образом необходимо у себя держать архивы. А их размеры сопоставимы с размерами полученных после обработки *.csv-файлов. Если архивов немного, тогда без разницы, в противном случае..... 2) Т.к. это прайс-листы, то имена архивов бывает, что совпадают (например, price.zip). При этом их придется размещать по разным папкам, а это лиший напряг. Его тоже, в принципе, можо решить, но должно же быть более тривиальное решение!!! Может, правда, не нашел того, что нужно, но остается надеяться на второй вариант, хотя сходу он не пошел. Ждите завтра с новыми вопросами либо с положительным результатом |
| Автор: korob2001 27.5.2005, 03:16 |
| При загрузке на сервер, генерируй новое имя архиву, и избавишься от проблемы указанной во втором пункте. |
| Автор: Гость_Alex 27.5.2005, 06:23 | ||
Пробовал еще вчера вечером, но в оношении wget я так и не нашел - позволяет ли он изменять имя файла. Однако по крайней мере это позволяет сделать приведенный выше перловский код. Таким образом, в итоге на одну проблему меньше. Однако другая проблема осталась: при проверке обновления происходит сравнение дат сохраненного файла и закачиваемго. А следовательно, как я выше говорил, удваивается потребляемое пространство, что на определенном этапе все равно потребует решения!!! Как тут ни крути! Вопрос остался вопросом, хотя кое-какие продвижения все-таки есть |
| Автор: korob2001 27.5.2005, 06:46 |
| Гость_Alex - ну ты и намутил воды. Я нифига не врубаюсь в смысл всего этого. Вот как я тебя понимаю: Есть некоторый хост, на который кто-то заливает архивы, так же он ( кто-то ) может проматривать список архивов и скачивать их. Я тебя правильно понимаю??? Или эти архивы разбросаны по сети??? |
| Автор: Гость_Alex 27.5.2005, 07:06 |
| Эти архивы разбросаны по сети. Я сам их заливаю и обрабатываю. И мне, чтоб лишний раз не заливать, нужно просто проверять время модификации. Впрочем возможно часть впросов будет снята, если зайти на http://price.ubd.ru Правда это первоначальный вариант: для поисковиков более-менее оптимизирован, а до дизайна пока руки не доходят |
| Автор: korob2001 27.5.2005, 07:50 | ||
Извини, краток буду. У меня через 15 минут поезд. Посмотри этот код:
Удачи. |
| Автор: Гость_Alex 27.5.2005, 07:57 |
| Спасибо, сегодня попробую Сейчас самому собираться надо |
| Автор: Sadok 27.5.2005, 09:00 | ||||
|
| Автор: Гость_Alex 27.5.2005, 22:38 | ||
| 1) На счет wget - я немного сглупил. Видел эту опцию, но когда обкатывал программу вместо -О поставил -о, что соответствует записи в логфайл. Долго разбираться не стал, т.к. указанная выше проблема хранения на серваке архивов все равно не решалась, а предложенный в следующем сообщении перловский код, в принципе, делал тоже самое. 2)
Работает!!! Спасибо!!! Большое спасибо всем за советы!!! Удачи. |
| Автор: Гость_Alex 29.5.2005, 06:20 |
| Это опять я. Ларец оказался с сюрпризами. Возникла новая проблема, вернее я только что на нее наткнулся С помощью последнего из приведенных перловских кодов не всегда удается определить время модификации файлов Вот пару примеров: 1) "http://www.voil.ru/price.zip" 2) не удается получить время модификации php-шных файлов, хотя можно визуально увидеть это время, если указать строке адреса браузера путь папки, в которой они лежат (за исключением корневого каталога) Вторая проблема меня, в принципе, не интересует. Ее привел для полноты картины. Возможно они как-то связаны. А как быть с первой??? |
| Автор: korob2001 29.5.2005, 09:47 |
| Просто таким кодом мы обрабатываем заголовок, который нам возвращает сервер на запрос. Некоторые сервера не делают этого. |
| Автор: Гость_Alex 29.5.2005, 12:10 | ||||
Это я понял, как только ты выслал мне код. За него еще раз спасибо, он мне здорово помог!
Может быть и так, а может и не совсем: 1) Например, у меня есть файл - "http://price.ubd.ru/raznoe/firmi.php" Если подставить этот URL в тот код, то мы ничего не получим, хотя, если указать адрес папки, где лежит файл "firmi.php", то можно увидеть время модификации... Возможно это из-за php-шного расширения 2) В отношении "http://www.voil.ru/price.zip"??? Где подколка не знаю. Здесь есть один нюанс, который я не совсем хорошо познал, поэтому пока сваливаю на него-это автоматическая переадресация (возможно реализованная разработчиком). Так, например, ели указать "http://www.voil.ru/html/", меня автоматически выбрасывает на главную страницу. Возможно высказанное предположение - полный бред, но пока я в этом не разобрался, такой вариант остается... Еще немного повожусь. Если не получится, оставлю до лучших времен. Благо таких подводных камней немного |