Приветствую, знатоки! Постоянно сталкиваюсь с такой ситуацией: при выгрузке файлов через браузер, скорость обычно в 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);
Спасибо!