Download файлов
[это можно не читать]
Сейчас в меня полетят камни мол как можно задавать такие тривиальные вопросы ... но видимо без пинка в нужном направлении разобраться не смогу. Задача простая, есть ОООООчень много небольших файлов на серверах, поскольку это облачное хранилище то доступ к ним логичнее осуществлять через банальный http. Мне нужно написать скрипт для их скачивания(для бекапа). [/это можно не читать] Итого имеется куча http адресов файлов, их нужно скачать. Проблема заключается в том, что я не представляю как опеределить что файл закачан полностью? Чтобы отрубания сервера, или проблемы с интернетом и т.п. не влияли на файлы, и недокаченные файлы качались заново. А, ну да, пишется это всё на PHP. Заранее спасибо. |
обычно целостность определяют по контрольной сумме (md5) файла.
проблема только в том, чтобы высчитать 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). А при проблемах со связью он не может дважды выдать файл одинаково неполный. |
хм.. на сервере нельзя это высчитывать? это бы помогло избежать этой трудности.
|
Цитата:
Иными словами не подходит для моей конкретной задачи, поэтому ограничиваюсь http запросами. |
чтобы сравнить, правильно ли скачен файл, ничего по сути о нём не зная, необходимо знать путь файла (откуда скачивать) и достоверность о том, что он скачен верно (вот тут загвоздка). последнее можно определить по проверке их md5, либо проверке их размеров.
вам придётся скачивать файл по три раза, чтобы убедиться в правильности скачки. |
melky,
видимо я Вас не до конца понимаю. Разве функция которую я написал выше не дает достаточную уверенность что файл скачан верно? Ну и тогда файл получается мы скачиваем 2 раза по http, и 1 раз локально проверяя md5. Или я что-то упустил? |
да нет, всё верно. а если результаты отличаются (1 и 2), то как вы опознаете, какой файл скачен верно? придётся скачивать ещё раз.
|
Цитата:
Спасибо! |
При ответе на запрос веб-сервер обычно отправляет в ответе заголовок Content-Length. Вот и сверяйте размер файла с ним.
|
Часовой пояс GMT +3, время: 18:51. |