php возобновить загрузку ftp с помощью curl multi

Я не могу возобновить загрузку по FTP, используя curl. Он всегда добавляет полный локальный файл к частично загруженному удаленному файлу, в результате чего удаленный файл становится больше локального файла.

Мне интересно, если я пропустил вариант или если curl_multi имеет какое-либо отношение к этому?

$resume = true

$filesize текущий размер удаленного файла в байтах, полученный с помощью отдельного ftp-запроса curl.

Я пробовал с CURLOPT_FTPAPPEND опция вкл и выкл.

Любая помощь будет великолепна, так как я бьюсь головой о стену, пытаясь понять это 🙂

...

$ch[$i] = curl_init();

$file = fopen($local_file, 'rb');

if ($resume)
{
curl_setopt($ch[$i], CURLOPT_RESUME_FROM, $filesize);

// move file position forward to resume
fseek($file, $filesize);
}

curl_setopt($ch[$i], CURLOPT_URL, $remote_file);
curl_setopt($ch[$i], CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch[$i], CURLOPT_USERPWD, "{$ftp['user']}:{$ftp['pass']}");
curl_setopt($ch[$i], CURLOPT_UPLOAD, true);
curl_setopt($ch[$i], CURLOPT_HEADER, false);
curl_setopt($ch[$i], CURLOPT_INFILE, $file);
curl_setopt($ch[$i], CURLOPT_INFILESIZE, filesize($local_file));

curl_multi_add_handle($mh, $ch[$i]);

...

ОБНОВЛЕНО

Так как часы поиска в Google не помогли, я придумал простую работу вокруг.

Существует не так много сообщений об использовании curl для возобновления загрузки, поэтому я надеюсь, что это поможет кому-то еще сэкономить время.

Это всего лишь одна строка, используя fseek(), но это обычно так;)

0

Решение

ОБНОВЛЕНО

Так как часы поиска в Google не помогли, я придумал простую работу вокруг.

Существует не так много сообщений об использовании curl для возобновления загрузки, поэтому я надеюсь, что это поможет кому-то еще сэкономить время.

использование fseek() переместить позицию файла перед вызовом curl_setopt($ch[$i], CURLOPT_INFILE, $file);

$ch[$i] = curl_init();

$file = fopen($local_file, 'rb');

if ($resume)
{
curl_setopt($ch[$i], CURLOPT_RESUME_FROM, $filesize);

// move file position forward to resume
fseek($file, $filesize);
}

curl_setopt($ch[$i], CURLOPT_URL, $remote_file);
curl_setopt($ch[$i], CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch[$i], CURLOPT_USERPWD, "{$ftp['user']}:{$ftp['pass']}");
curl_setopt($ch[$i], CURLOPT_UPLOAD, true);
curl_setopt($ch[$i], CURLOPT_HEADER, false);
curl_setopt($ch[$i], CURLOPT_INFILE, $file);
curl_setopt($ch[$i], CURLOPT_INFILESIZE, filesize($local_file));

curl_multi_add_handle($mh, $ch[$i]);

...
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector