使用cURL限制下载带宽

8
我一直在尝试使用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个回答

17

http://bugs.php.net/bug.php?id=51815 这是最近才添加的内容,没有出现在任何生产版本中。但仍然是正确的答案,谢谢。 - dev-null-dweller

0

CURLINFO_SPEED_DOWNLOAD 会告诉 你下载速度;它不是你可以设置的选项。话虽如此,如果它是一个选项,你会在错误的地方设置它(在你发出 HEAD 请求获取文件大小的部分 - 顺便说一下,这是不必要的,但这与本题无关 - 而不是你实际下载文件的地方)。

你可以使用 PHP 流来完成,其中你将循环并根据你的限制检索/发送更多数据或等待,但我不认为有一种方法可以交换 curl 资源以获得 PHP 流。你唯一的选择可能是使用 http wrapper

你也可以尝试使用CURLOPT_FILE并将文件保存到“php://temp”流中,然后从中读取,但我不确定它是否有效。


-1
我会通过服务器(例如IIS或Apache)限制带宽。

1
如果我需要这样做,我会在操作系统或网络上进行 - 但是天哪....为什么?我同意这对于测试是有意义的,但在生产中带宽会减慢您的服务器以及客户端。 - symcbean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接