... и снова IIS компостирует мозг. Не успел я разобраться с одной проблемой, как Web-сервер IIS подкинул мне ещё одну. В общем файлы на загрузку отдаются PHP-скриптом, предполагается, что в зависисмости от типа пользователя будет урезаться скорость. Гостям к примеру 100 кб/c Почти везде в интернете присутствует этот элементарный пример отдачи файла с использованием функции sleep(). Код (PHP): set_time_limit(0); // Неограниченное время выполнение скрипта (для длительных загрузок) ob_end_clean(); // Отключаем буферизацию вывода // ... (всякий код) $fd = fopen($file, 'rb'); // Открываем файл для чтения $download_rate = 100; // Ограничение скорости кб/c while (!feof($fd)) { print fread($fd, $download_rate * 1024); // Читаем из файла блок и отдаём его клиенту sleep(1); // задержка 1 сек } fclose($fd); exit; // ... (всякий код) В общем на Apache под тем же Windows - данный код работает на ура! Но на IIS мы видим совершенно другую картину: Симптомы такие: После клика по ссылке: 1) Браузер задумывается (вкладка подвисает) от 30 секунд до 1 минуты и дольше 2) Наконец загрузка стартует и сразу показывает что уже скачено несколько мегабайт 3) Далее какое-то время загрузка идёт штатно с заданным ограничением скорости 4) Дойдя до определённого предела* загрузка останавливается, скорость падает до 0 б/c 5) Через какое-то время браузер выдаёт "ошибка сети" и что-то подобное * Предел до которого доходит загрузка и останавливается кратен значению переменной $download_rate, к примеру если указано значение 100 - загрузка дойдёт до 10 мегабайт и остановится, если указать 50, то остановится на 5 мегабайтах Подскажите, как это можно разрешить или найти другой способ ограничения скорости в скрипте? P.S. С удовольствием бы перешёл на Apache, но заказчик... only IIS :'(
соглашусь с denis01. не надо делать трафик шейпер на пыхе. пара десятков анонимусов будут держать в озу пару десятков пхп-машин которые спят в ожидании разрешения на следующий кусок. штатные средства веб-сервер будут явно меньше бесполезных нагрузок на сервер давать.