Ограничить количество одновременных загрузок файлов в PHP для предотвращения DOS?

Я хотел бы знать количество одновременных загрузок файлов в данный момент. Например. Если число превысит мой лимит, я покажу пользователю сообщение с извинениями, чтобы попробовать позже.

Есть ли способ получить количество текущих загрузок в PHP?

Спасибо за помощь...


person Frodik    schedule 06.05.2012    source источник
comment
Вы имеете в виду, сколько в настоящее время выполняется запросов POST, содержащих загрузку файла, по всему серверу? Интересный вопрос.   -  person deceze♦    schedule 06.05.2012
comment
Какой предел это могло превысить? PHP на самом деле не задействован, пока загрузка не завершится. Если сам веб-сервер может обрабатывать несколько параллельных загрузок, не должно быть особых причин для его ограничения...   -  person deceze♦    schedule 06.05.2012
comment
@deceze Ты действительно прав. Я хотел бы предотвратить простую DOS-атаку со стороны плохих пользователей, которые попытаются загрузить большие файлы в один момент. Я знаю, что он не пуленепробиваемый, но это избавит меня от боли. PHP должен быть каким-то образом задействован, потому что я могу получить статус загрузки загрузки (используя APC).   -  person Frodik    schedule 06.05.2012
comment
Может быть, это может быть настроено самим веб-сервером?   -  person Surreal Dreams    schedule 06.05.2012
comment
Да, пытаться предотвратить (D)DoS в PHP в лучшем случае сложно. Это скорее работа для самого веб-сервера.   -  person deceze♦    schedule 06.05.2012
comment
Пожалуйста, если можете, опубликуйте ответ либо с решением, либо с указанием, что это невозможно с некоторыми ссылками. Спасибо за ваши комментарии и помощь.   -  person Frodik    schedule 06.05.2012


Ответы (1)


Для этого лучше использовать какой-нибудь модуль веб-сервера. Для апача есть mod_qos. Одной из его особенностей является Limit the maximum number of concurrent requests to a location/resource (URL) or virtual host - именно то, что вам нужно. Он также может делать гораздо больше, даже ограничивая пропускную способность. Информация о модуле находится здесь.

person s.webbandit    schedule 06.05.2012
comment
Спасибо за ответ, mod_qos выглядит многообещающе. Но могу ли я обработать отклоненный запрос PHP, чтобы я мог отобразить вежливое сообщение пользователю? - person Frodik; 06.05.2012
comment
В mod_qos есть параметр конфигурации QS_ErrorPage <URL>, который указывает для error page to be returned when a request is denied. Таким образом, вы можете отправлять запрещенных пользователей в удобное для вас место и отображать для них все, что захотите! - person s.webbandit; 06.05.2012