Ограничение пропускной способности загрузки с помощью cURL - PullRequest
8 голосов
/ 18 июня 2010

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

Ответы [ 3 ]

15 голосов
/ 18 июня 2010

CURLOPT_MAX_RECV_SPEED_LARGE - это требуемая опция.

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

0 голосов
/ 18 июня 2010

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

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

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

0 голосов
/ 18 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...