Я пытался ограничить пропускную способность с 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');
CURLOPT_MAX_RECV_SPEED_LARGE
- это тот вариант, который вам нужен.
Добавлено в curl 7.15.5. Присутствует в PHP / CURL с PHP 5.4.0
CURLINFO_SPEED_DOWNLOAD
информирует вас о скорости загрузки; это не опция, которую можно установить. Если бы это была опция, вы бы установили ее в неправильном месте (в той части, где вы делаете запрос HEAD для получения размера файла, - что, кстати, является излишним, но это не имеет отношения к делу, - а не там, где вы фактически скачиваете файл).
Вы можете сделать это с помощью PHP-потоков, где вы зацикливаетесь и либо получаете/отправляете больше данных, либо ждете в соответствии с вашим лимитом, но я не думаю, что существует способ обмена ресурса curl на PHP-поток. Единственной альтернативой может быть использование http-обертки.
Вы также можете попробовать CURLOPT_FILE
и сохранить файл в поток "php://temp", а затем читать из него, но я не уверен, что это сработает.
Я бы ограничил пропускную способность через сервер, например IIS или Apache.