27.01.2012, 09:46
|
|
Интернет-турист
|
|
Регистрация: 01.08.2008
Сообщений: 516
|
|
B@rmaley.e><e,
Примерно так?
function safe_copy($source_file, $destination_file) {
if(!$aHeaders=@get_headers($source_file, 1)) return false;
if(!$iSize1=$aHeaders['Content-Length']) return false;
if(!@copy($source_file, $destination_file)) return false;
if(!$iSize2=@filesize($destination_file)) return false;
if($iSize1!=$iSize2) return false;
return true;
}
|
|
27.01.2012, 10:13
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Да.
|
|
27.01.2012, 20:29
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
function curl_download( $url, $file ) {
// открываем файл, на сервере, на запись
$dest_file = @fopen( $file, "w" );
// открываем cURL-сессию
$resource = curl_init();
// устанавливаем опцию удаленного файла
curl_setopt( $resource, CURLOPT_URL, $url );
// устанавливаем место на сервере, куда будет скопирован удаленной файл
curl_setopt( $resource, CURLOPT_FILE, $dest_file );
// заголовки нам не нужны
curl_setopt( $resource, CURLOPT_HEADER, 0 );
// выполняем операцию
curl_exec( $resource );
$error = curl_errno( $resource );
// закрываем cURL-сессию
curl_close( $resource );
// закрываем файл
fclose( $dest_file );
return $error;
}
|
|
27.01.2012, 23:01
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
devote, разве CURL сможет понять, когда связь оборвалась, а когда файл скачан верно \ неверно ?
|
|
27.01.2012, 23:09
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от melky
|
devote, разве CURL сможет понять, когда связь оборвалась, а когда файл скачан верно \ неверно ?
|
Ну если будет использоваться Content-Length то-есть если сервер пришлет длину контента, и курл получит меньше чем положено, то вернет ошибку. Если же сервер будет возвращать контент в виде кусков (chunks) то ошибка может возникнуть в том случае если кусок не удовлетворяет своей длине. Обычно такие ошибки CURL нормально воспринимает. Но если сервер отдаст вместо файла что-то другое, например HTML страницу, то CURL ничего не скажет. Тут нужно проверять заголовки, а точнее в идеале лучше и то и другое делать.
|
|
27.01.2012, 23:12
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от devote
|
Ну если будет использоваться Content-Length то-есть если сервер пришлет длину контента, и курл получит меньше чем положено, то вернет ошибку. Если же сервер будет возвращать контент в виде кусков (chunks) то ошибка может возникнуть в том случае если кусок не удовлетворяет своей длине. Обычно такие ошибки CURL нормально воспринимает. Но если сервер отдаст вместо файла что-то другое, например HTML страницу, то CURL ничего не скажет. Тут нужно проверять заголовки, а точнее в идеале лучше и то и другое делать.
|
вот этой мелочи я не знал. мало изучал php.
|
|
28.01.2012, 18:05
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
да и функции типа md5_file и copy должны возвращать ошибки. Вообще непонятно, откуда взялись идеи о том, что файл может неправильно скачаться. TCP стал ненадежным протоколом?
Сообщение от greatilya
|
поскольку это облачное хранилище то доступ к ним логичнее осуществлять через банальный http
|
1) почему? 2) разве это не обязанность облачных хранилищ, брать на себя заботу о надежном хранении данных?
|
|
02.02.2012, 19:47
|
|
Интернет-турист
|
|
Регистрация: 01.08.2008
Сообщений: 516
|
|
Сообщение от x-yuri
|
TCP стал ненадежным протоколом?
|
Нет, интерент по "телефонной лапше" не начинал быть надежным
Сообщение от x-yuri
|
1) почему?
|
Потому что если скачивать файлы посредством API предварительно пройдя авторизацию, конечно можно быть уверенным в правильности копирования файла, но этот способ не является для меня приемлемым, так как:
1. при этом на авторизацию и прочие "движняки" потребляется куда больше трафика - следовательно затрачивается значительно времени.
2. для авторизаций и прочих "движняков" требуется затрачивается также исходящая скорость(в смысле в большем объеме чем при загрузке по http). Это я проверял, потребление исходящего трафика там достаточно большое(это некая особенность API). А у меня входящий трафик 8Мбит, исходящая 0,5Мбит. Следовательно все варианты с затратой исходящего трафика мне не подходят.
Если помножить 1 и 2 пункты на миллины мелких файлов, то получается что каждая сотая секунды "на счету". Пока удалось добиться загрузки со скоростью порядка 1 секунды на файл, позже подумаю как увеличить скорость за счет многопоточного Curl.
Сообщение от x-yuri
|
2) разве это не обязанность облачных хранилищ, брать на себя заботу о надежном хранении данных?
|
в надежности я не сомневался(тем более что данные там хранятся в нескольких копиях), но иметь у себя резервную копию данных, на мой взгляд, нужно всегда.
|
|
03.02.2012, 02:42
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от greatilya
|
Нет, интерент по "телефонной лапше" не начинал быть надежным
|
TCP гарантирует целостность передаваемых данных. Это значит, что либо информация корректно передалась, либо не передалась. Других вариантов нету.
|
|
03.02.2012, 15:02
|
|
Интернет-турист
|
|
Регистрация: 01.08.2008
Сообщений: 516
|
|
Сообщение от x-yuri
|
TCP гарантирует целостность передаваемых данных
|
Правильно ли я понял? Если даже используем функцию copy, и если в процессе копирования интернет либо сервер с файлом отрубится, то функция вернет false?
|
|
|
|