Ограничение пропускной способности загрузки с помощью cURL


Я пытался ограничить пропускную способность с помощью 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'); 

Author: jww, 2010-06-18

3 answers

CURLOPT_MAX_RECV_SPEED_LARGE это тот вариант, который вы хотите.

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

 15
Author: Daniel Stenberg, 2016-01-09 16:24:36

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

 0
Author: Nik, 2010-06-18 01:56:22

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

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

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

 0
Author: Artefacto, 2010-06-18 02:04:15