Да, это есть на многих сайтах. Да, я видел исходники. Где-то перловая обертка для PHP, которая парсит запрос и отдает список файлов основному скрипту, где-то перловый скрипт самостоятельно работает с файлами... И все это идет через штатный CGI.pm, вроде:
1. через хаки подменяем в CGI.pm временную директорию файлов, вызываем new CGI и считаем размер файлов в нашей временной директории по мере аплоада - не люблю использовать недокументированное, чего нет в perldoc CGI
2. самостоятельно читаем весь STDIN в файл - тут размер и так виден, а потом открываем этот файл как STDIN и опять new CGI - двойное отжирание диска
Все это топорно и неконтролируемо. А охота красоты... Т.е. если нам заливает 500 метров непривилегированный юзер - ему показываем 403, если авторизация есть и определенный статус у пользователя - 201. Конечно, можно в Апаче настроить лимиты, но это гибко не сделать, не будешь же для каждого юзера создавать свою директорию со своим htaccess и персональными лимитами. Или, если я вижу, что мне льют avi - сразу обломить закачку, т.е. закрыть соединение. Или, по мере закачки считать md5 заливаемого файла, и если первые 10 метров md5 совпадут с блек-листом - опять обламываем пользователя. Ну это так, желаемое...
Что мне остается? Самостоятельный разбор STDIN - нравится больше всего, но очень уж велосипедно, да и через fast-cgi непонятно как прикрутить (управление получаю только после полного аплоада). Собственно, я бы уже велосипедил, если бы под fast-cgi мог получить запрос до полной заливки. Обычным CGI не хочу.
Появляются странные идеи: взять lighttpd, да добавить парсинг запросов прямо в него, пусть сам проверяет валидность заливаемых данных, считает md5, хранит их хеши в memcached, оттуда же проверяет и блеклист... Но, боюсь, моего красноглазия на это не хватит.
Какие идеи?