|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> WWW
—> lighttpd + mod_uploadprogress
lighttpd + mod_uploadprogress
Автор: irr.
Потребовалось сделать пользователям сайта возможность аплоадить mp3-файлы. Поскольку речь идет о файлах размером 5-10 MB, а скорость соединения у юзеров неизвестно какое, не помешало бы прикрутить и прогресс-бар. Кроме того, хотелось бы получить достаточно простое решение (т.к. и сам сайт простой на банальном php, да и я не веб-разработчик). И еще чтобы все это вертелось на lighttpd :).
Если бы у нас был Apache, а PHP работал бы как его модуль, то проблема легко решалась бы через расширение php5-uploadprogress. Пример в комлекте с этим расширением заводится с пол-оборота, все просто и понятно. Другой вариант - APC + json. Но у нас lighttpd и PHP в режиме fastcgi, и эти решения для него не подходят.
У lighttpd есть свой mod_uploadprogress, но он доступен только в версии 1.5, которая пока еще в разработке и в портах ее нет. Более того, представленное демо этого модуля на домашней страничке lighttpd вообще не работает :). Примеры, которые там можно скачать, с собранным вручную lighttpd 1.5 у меня тоже не пошли. Возможно что-то изменили в текущей svn-сборке (раз даже демка на сайте не работает), и эти примеры уже не актуальны. А может быть и руки у меня кривые :).
Тем не менее, решение все-таки было найдено. На странице описания mod_uploadprogress упомяналось про патч для версии 1.4.x, который правда ведет себя несколько иначе, но вроде бы уже полгода как стабилен.
Итак, начнем. Менее месяца назад в lighttpd была найдена серьезная уязвимость, поэтому обязательно обновляем порты. После этого выполняем следующие действия:
# cd /usr/ports/www/lighttpd/
# make patch
# cd work/lighttpd-1.4.*/
| теперь качаем и накладываем патч:
# wget -O mod_uploadprogress.patch \
labs.logic.cz/patches/lighttpd/1.4.x/lighttpd-1.4.23-mod_uploadprogress.patch
# patch -p1 < mod_uploadprogress.patch
| затем выполняем такие команды (они были подсмотрены мною в инструкции по сборке mod_geoip для lighttpd):
# aclocal
# automake -a
# autoconf
| и наконец собираем порт:
# cd ../../
# make install clean
| Убедимся в успешной сборке и наличии mod_uploadprogress:
# pkg_info -Ex lighttpd
lighttpd-1.4.26
# ls /usr/local/lib/lighttpd/ | grep uploadprogress
mod_uploadprogress.a
mod_uploadprogress.la
mod_uploadprogress.so
| Открываем конфиг lighttpd, в секцию server.modules добавляем "mod_uploadprogress", ну и куда-нибдуь в конец пишем:
upload-progress.progress-url = "/progress"
upload-progress.remove-timeout = 30
upload-progress.debug = "enable"
| Перезапускаем lighttpd:
# /usr/local/etc/rc.d/lighttpd restart
| Рабочий пример прогресс-бара удалось найти тут. В нем используется только html + javascript (JQuery).
Признаком того что модуль вообще работает, должны быть следующие повторяющиемся с определенным интервалом строчки в error.log:
2010-02-22 15:23:15: (mod_uploadprogress.c.448) (uploadprogress) urls /progress == /progress
2010-02-22 15:23:15: (mod_uploadprogress.c.509) connection is known: 5b4d77867be787ee58f81032dbd84ea1 , sending: { "state" : "uploading", "received" : 14623250, "size" : 71456492}
2010-02-22 15:23:17: (mod_uploadprogress.c.448) (uploadprogress) urls /progress == /progress
2010-02-22 15:23:17: (mod_uploadprogress.c.509) connection is known: 5b4d77867be787ee58f81032dbd84ea1 , sending: { "state" : "uploading", "received" : 30229010, "size" : 71456492}
2010-02-22 15:23:19: (mod_uploadprogress.c.448) (uploadprogress) urls /progress == /progress
2010-02-22 15:23:19: (mod_uploadprogress.c.509) connection is known: 5b4d77867be787ee58f81032dbd84ea1 , sending: { "state" : "uploading", "received" : 45826578, "size" : 71456492}
|
Если при этом не работает прогресс-бар, то здесь уже необходимо работать над совместимостью браузера и java-скриптов. В дальнейшем, чтобы не засорять лог, вывод этой информации можно отключить в конфиге lighttpd, исправив строчку:
upload-progress.debug = "disable"
| Вроде бы не сложно. Но в условиях нехватки информации и отсутствии рабочих примеров - далось не легко. Поэтому решил оформить статью.
размещено: 2010-02-22,
последнее обновление: 2010-02-22,
автор: irr
|
|
|
|
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
|
Статистика сайта
|
Сейчас на сайте находится: 15 чел.
|
За последние 30 мин было: 51 человек
|
За сегодня было 9272 показов, 666 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
|
Комментарии пользователей [0 шт.]