@webpixel

Как реализовать так называемую chunked выгрузку файлов на удаленный сервис при помощи PHP CURL?

Приветствую, знатоки! Постоянно сталкиваюсь с такой ситуацией: при выгрузке файлов через браузер, скорость обычно в 3-5 раз больше, чем через скрипт написанный для автоматизации, при помощи PHP CURL. Нашел несколько примеров решения данной задачи на других языках, путем разбивания файла на 8-10 кусков (chunk) и их параллельной выгрузки. Интересует, как это реализовать на PHP. Подскажите пожалуйста. Будут полезны и интересны любые реализации, можно при помощи Guzzle и схожих библиотек.

Пример моего скрипта:
<?php

$file = 'sashaGrey.avi';

function zippyShare(string $file)
{
    $ping = slapCurl('https://www.zippyshare.com/');

    preg_match('/name="uploadId" value="(.*?)"/', $ping, $uploadId);
    preg_match('@http://.+\.zippyshare\.com/upload@', $ping, $server);

    $params = [
        'uploadId' => $uploadId[1],
        'file_0'   => curl_file_create($file)
    ];

    $uploadFile = slapCurl($server[0], $params, true);

    if (preg_match('#\[url=(.*?)\]#', $uploadFile, $match)) {
        return trim($match[1]);
    }
}

function slapCurl(string $url, array $data = null, bool $progress = false)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    if (!is_null($data)) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }

    if ($progress) {
        curl_setopt($ch, CURLOPT_NOPROGRESS, false);
    }

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

$result = zippyShare($file);

var_dump($result);


Спасибо!
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
Только верой, любовью, трудом и медикаментами...
оттрейси Fiddler ом и соблюди все загловки + чексуммы, там ничего сложного - нужно кропотливо воспроизвести заголовки

на httpbin можно проверять
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 55 000 до 80 000 руб.
WACDAQ Москва
от 120 000 руб.
HTML Academy Санкт-Петербург
от 110 000 до 130 000 руб.
22 авг. 2019, в 02:23
45000 руб./за проект
22 авг. 2019, в 02:15
5000 руб./за проект
22 авг. 2019, в 01:00
300 руб./за проект