Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.01.2012, 19:23
Аватар для greatilya
Интернет-турист
Отправить личное сообщение для greatilya Посмотреть профиль Найти все сообщения от greatilya
 
Регистрация: 01.08.2008
Сообщений: 516

Download файлов
[это можно не читать]
Сейчас в меня полетят камни мол как можно задавать такие тривиальные вопросы ... но видимо без пинка в нужном направлении разобраться не смогу.

Задача простая, есть ОООООчень много небольших файлов на серверах, поскольку это облачное хранилище то доступ к ним логичнее осуществлять через банальный http. Мне нужно написать скрипт для их скачивания(для бекапа).
[/это можно не читать]

Итого имеется куча http адресов файлов, их нужно скачать. Проблема заключается в том, что я не представляю как опеределить что файл закачан полностью? Чтобы отрубания сервера, или проблемы с интернетом и т.п. не влияли на файлы, и недокаченные файлы качались заново. А, ну да, пишется это всё на PHP.

Заранее спасибо.
__________________
VPS от 175 рублей (есть скидки 15% писать в ПМ) Анализ рынка VPS серверов
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен.
Альберт Эйнштейн
Ответить с цитированием
  #2 (permalink)  
Старый 26.01.2012, 20:24
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

обычно целостность определяют по контрольной сумме (md5) файла.

проблема только в том, чтобы высчитать md5 для файла в источнике.
Ответить с цитированием
  #3 (permalink)  
Старый 26.01.2012, 21:29
Аватар для greatilya
Интернет-турист
Отправить личное сообщение для greatilya Посмотреть профиль Найти все сообщения от greatilya
 
Регистрация: 01.08.2008
Сообщений: 516

Сообщение от melky
проблема только в том, чтобы высчитать md5 для файла в источнике
вот и я думаю как это сделать... ведь если мы просто считаем этот файл, то нет гарантии что нам файл выдался до конца, и не произошло обрывов связи. Хотя если подумать то наверное что-то вроде этого должно стабильно работать:
function safe_copy($source_file, $destination_file) {
	if(!$sMD5_step1=@md5_file($source_file)) return false;
	if(!@copy($source_file, $destination_file)) return false;
	if(!$sMD5_step2=@md5_file($destination_file)) return false;
	if($sMD5_step1!==$sMD5_step2) return false;
	return true;
}

Как я понимаю, тут получилась двойная проверка, т.к. по сути здесь 2 запроса на сервер: md5_file($source_file) и copy($source_file, $destination_file). А при проблемах со связью он не может дважды выдать файл одинаково неполный.
__________________
VPS от 175 рублей (есть скидки 15% писать в ПМ) Анализ рынка VPS серверов
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен.
Альберт Эйнштейн

Последний раз редактировалось greatilya, 26.01.2012 в 21:32.
Ответить с цитированием
  #4 (permalink)  
Старый 26.01.2012, 22:02
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

хм.. на сервере нельзя это высчитывать? это бы помогло избежать этой трудности.
Ответить с цитированием
  #5 (permalink)  
Старый 26.01.2012, 22:20
Аватар для greatilya
Интернет-турист
Отправить личное сообщение для greatilya Посмотреть профиль Найти все сообщения от greatilya
 
Регистрация: 01.08.2008
Сообщений: 516

Сообщение от melky
на сервере нельзя это высчитывать? это бы помогло избежать этой трудности.
нет, там конечно можно получать доступ через API, там и должны быть md5 хеши, но при работе через API время работы скрипта значительно увеличивается, причем трафик тоже значительно больше потребляется.
Иными словами не подходит для моей конкретной задачи, поэтому ограничиваюсь http запросами.
__________________
VPS от 175 рублей (есть скидки 15% писать в ПМ) Анализ рынка VPS серверов
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен.
Альберт Эйнштейн
Ответить с цитированием
  #6 (permalink)  
Старый 26.01.2012, 22:25
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

чтобы сравнить, правильно ли скачен файл, ничего по сути о нём не зная, необходимо знать путь файла (откуда скачивать) и достоверность о том, что он скачен верно (вот тут загвоздка). последнее можно определить по проверке их md5, либо проверке их размеров.
вам придётся скачивать файл по три раза, чтобы убедиться в правильности скачки.
Ответить с цитированием
  #7 (permalink)  
Старый 26.01.2012, 22:40
Аватар для greatilya
Интернет-турист
Отправить личное сообщение для greatilya Посмотреть профиль Найти все сообщения от greatilya
 
Регистрация: 01.08.2008
Сообщений: 516

melky,
видимо я Вас не до конца понимаю. Разве функция которую я написал выше не дает достаточную уверенность что файл скачан верно? Ну и тогда файл получается мы скачиваем 2 раза по http, и 1 раз локально проверяя md5. Или я что-то упустил?
__________________
VPS от 175 рублей (есть скидки 15% писать в ПМ) Анализ рынка VPS серверов
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен.
Альберт Эйнштейн
Ответить с цитированием
  #8 (permalink)  
Старый 26.01.2012, 22:58
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

да нет, всё верно. а если результаты отличаются (1 и 2), то как вы опознаете, какой файл скачен верно? придётся скачивать ещё раз.
Ответить с цитированием
  #9 (permalink)  
Старый 26.01.2012, 23:10
Аватар для greatilya
Интернет-турист
Отправить личное сообщение для greatilya Посмотреть профиль Найти все сообщения от greatilya
 
Регистрация: 01.08.2008
Сообщений: 516

Сообщение от melky
да нет, всё верно. а если результаты отличаются (1 и 2), то как вы опознаете, какой файл скачен верно? придётся скачивать ещё раз.
а тут на мой взгляд уже не важно. Если функция вернула FALSE, значит файл скачать не удалось, и нужно попробовать скачать заново но позже. Поскольку данная ситуация будет возникать крайне редко, то тут можно обычную обработку с очередью заданий на скачивание. Иными словами это уже "дело техники", реализаций придумать можно много.
Спасибо!
__________________
VPS от 175 рублей (есть скидки 15% писать в ПМ) Анализ рынка VPS серверов
Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен.
Альберт Эйнштейн
Ответить с цитированием
  #10 (permalink)  
Старый 26.01.2012, 23:48
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

При ответе на запрос веб-сервер обычно отправляет в ответе заголовок Content-Length. Вот и сверяйте размер файла с ним.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка БОЛЬШИХ файлов посредством ajax barcelona jQuery 7 12.10.2012 03:37
Индиептор загрузки файлов С СЕРВЕРА! GrishinEV Events/DOM/Window 12 01.12.2011 14:05
SWFUpload - отображение выбранных файлов Барин AJAX и COMET 2 17.07.2011 10:07
Скрипт для файлов Deff13 Общие вопросы Javascript 4 23.06.2011 10:46
jQuery:как получить список файлов в директории Chaos Lord jQuery 4 30.11.2009 19:55