Originally Posted by
skuwakin
в итоге загибают систему... Бред...
Загибает систему, извините, бред в вашем коде. Вы набираете в память непомерный буфер командой echo и плевать хотели на то, считал его клиент или нет. Где flush()?!
Я, в жизни на PHP не писавший, нашёл ответ за пять минут.
Code:
<?php
$file = "/tmp/store/Video/Sherlok_TS.avi"; // file to be send to the client
$speed = 8.5; // 8,5 kb/s download rate limit
if(file_exists($file) && is_file($file)) {
header("Cache-control: private");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($file));
header("Content-Disposition: filename=$file" . "%20");
flush();
$fd = fopen($file, "r");
while(!feof($fd)) {
echo fread($fd, round($speed*1024));
flush();
sleep(1);
}
fclose ($fd);
}
?>
и успешно перекачал из роутера 1,5Гб-файл без всякого непомерного потребления RAM. Закоментируйте sleep() если вам не нужна регулировка скорости.
Пожалуйста, продолжайте осваивать PHP на каком-нибудь профильном форуме, ваша проблема к роутеру не имеет никакого отношения.