Ограничение Пропускной способности Загрузки с ЗАВИХРЕНИЕМ

Я пытался ограничить пропускную способность с PHP. Я не могу заставить уровень загрузки быть ограниченным с PHP.

Можно ли помочь здесь?

function total_filesize($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "$url");
    curl_setopt($ch, CURLINFO_SPEED_DOWNLOAD,12); //ITS NOT WORKING! 
    curl_setopt($ch, CURLOPT_USERAGENT,
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) ".
            "Gecko/20071127 Firefox/2.0.0.11");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_NOBODY, true);


    $chStore = curl_exec($ch);
    $chError = curl_error($ch);
    $chInfo = curl_getinfo($ch);
    curl_close($ch);
    return $size = $chInfo['download_content_length'];
}

function __define_url($url) {
    $basename = basename($url);
    Define('filename',$basename);
    $define_file_size = total_filesize($url);
    Define('filesizes',$define_file_size);
}

function _download_file($url_file) { 
    __define_url($url_file);

    // $range = "50000-60000";
    $filesize = filesizes;
    $file = filename; 
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.$file.'"'); 
    header('Content-Transfer-Encoding: binary');
    header("Content-Length: $filesize");
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,"$url_file");
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    //  curl_setopt($ch, CURLOPT_RANGE,$range);

    curl_exec($ch);
    curl_close($ch);
}
_download_file('http://rarlabs.com/rar/wrar393.exe'); 

8
задан jww 5 April 2016 в 22:45
поделиться

3 ответа

CURLOPT_MAX_RECV_SPEED_LARGE - это тот вариант, который вам нужен.

Добавлено в curl 7.15.5. Присутствует в PHP / CURL с PHP 5.4.0

15
ответ дан 5 December 2019 в 11:22
поделиться

CURLINFO_SPEED_DOWNLOAD информирует вас о скорости загрузки; это не опция, которую можно установить. Если бы это была опция, вы бы установили ее в неправильном месте (в той части, где вы делаете запрос HEAD для получения размера файла, - что, кстати, является излишним, но это не имеет отношения к делу, - а не там, где вы фактически скачиваете файл).

Вы можете сделать это с помощью PHP-потоков, где вы зацикливаетесь и либо получаете/отправляете больше данных, либо ждете в соответствии с вашим лимитом, но я не думаю, что существует способ обмена ресурса curl на PHP-поток. Единственной альтернативой может быть использование http-обертки.

Вы также можете попробовать CURLOPT_FILE и сохранить файл в поток "php://temp", а затем читать из него, но я не уверен, что это сработает.

0
ответ дан 5 December 2019 в 11:22
поделиться

Я бы ограничил пропускную способность через сервер, например IIS или Apache.

0
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: