Регулирование скорости загрузки в PHP - PullRequest
0 голосов
/ 06 февраля 2012

Я пробовал основные из найденных в поиске Google и даже пытался написать один сам, однако у меня постоянно возникают проблемы с ним. Кажется, что он загружает контент со стороны сервера или что-то еще, а затем передает его пользователю, который уже будет загружен. Он откроет страницу загрузки и займет около 10 секунд для загрузки, а затем передаст файл пользователю полностью, что будет выглядеть так, как будто он не загружается.

Мне было интересно, есть ли какие-либо классы, которые были написаны для скоростей загрузки газа, или как я могу решить эту проблему.

У меня есть это в настоящее время;

header("Content-type: application/force-download");
    header("Content-Transfer-Encoding: Binary");
    header("Content-length: ".filesize("uploads/$filename"));
    header("Content-disposition: attachment; filename=\"$origname");
    readfile("uploads/$filename");

Спасибо!

Ответы [ 3 ]

5 голосов
/ 06 февраля 2012
@set_time_limit(0); // don't abort if it takes to long
header("Content-type: application/force-download");
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize("uploads/".$filename));
header('Content-disposition: attachment; filename="'.$origname.'"');
$perSecond = 5; // 5 bytes per second

$file = fopen("uploads/".$filename, 'r');
while(!feof($file)) {
    echo fread($file, $perSecond);
    flush();
    sleep(1);
}

Это отправит пользователю файл со сниженной скоростью загрузки. Это работает в основном так:

  • Открыть файл
  • цикл до конца
  • эхо X байтов
  • сбросить вывод для пользователя
  • сон на одну секунду.
0 голосов
/ 09 августа 2015

Мне было интересно, есть ли какие-либо классы, которые были записаны на скорости загрузки газа

Сейчас есть: bandwidth-throttle/bandwidth-throttle

use bandwidthThrottle\BandwidthThrottle;

$in  = fopen(__DIR__ . "/resources/video.mpg", "r");
$out = fopen("php://output", "w");

$throttle = new BandwidthThrottle();
$throttle->setRate(100, BandwidthThrottle::KIBIBYTES); // Set limit to 100KiB/s
$throttle->throttle($out);

stream_copy_to_stream($in, $out);
0 голосов
/ 06 февраля 2012

Вы можете найти интересующий меня мой альфа-этап Полоса пропускания .Вероятно, нужно немного больше работы, но уже есть много интересных вещей.Я не думаю, что у него есть лицензия F / OSS;пингуй меня, если хочешь, чтобы я его дал!

...