Web-интерфейс для wget - программы загрузки файлов по сети. Построен на Ajax+css3 с клиентской стороны, и php с серверной. Требования к системе, на которой разворачивается данное решение:
- *nix (по крайней мере писалось именно под эту платформу; для запуска под иной - требуются рабочие порты
wget
,ps
иkill
); - php5.x (скорее всего работать будет и на php4.x, по под руками нет готовой системы для тестирования);
- Браузер с поддержкой javascript (очень желательно - с поддержкой css3).
Как уже было сказано выше - в роли серверной части выступает скрипт, написанный на php. Он выполняет следующие задачи:
- Получение информации о запущенных задачах;
- Отмена запущенных задач;
- Добавление новых задач;
- Возвращение результатов в JSON формате (отвечает на на POST, так и GET запросы).
Для своей работы ему требуются ps
, wget
и kill
соответственно. Для получения значения состояния закачки (на сколько процентов завершена) используется следующий принцип:
- Задачи
wget
запускаются с флагами--background
и--progress=bar:force
; - Вывод лога загрузки производится в файл, установленный в параметре
--output-file=FILE
; - При запросе состояния задач с помощью
ps -ax
получаем путь к файлу, установленный в--output-file=FILE
; - Читаем крайнюю строку этого файла, получая из него искомое значение.
Неприятная особенность - лог файлы после завершения закачки автоматически не удаляются, и делать на данный момент это приходится ручками (добавив в crontab
что то похожее на rm -f /tmp/wget*.log.tmp
).
Данную возможность можно отключить, закомментировав строку define('tmp_path', '/tmp');
Путь до директории, в которую будет происходить сохранение всех загружаемых файлов устанавливается в строке define('download_path', BASEPATH.'/downloads');
.
Доступно удобное указание путей до ps
, wget
и kill
. Для этого достаточно убрать комментарий вначале строки и указать свой путь, например: define('wget', '/usr/bin/wget');
.
Возможна установка ограничения на скорость закачки из секции настроек. За это отвечает строка define('wget_download_limit', '1024');
.
Для определения в списке задачи запущенной через GUI от любой другой используется определенный флаг, уникальный для GUI. Он установлен в строке define('wget_secret_flag', '--max-redirect=4321');
и его менять без необходимости не надо.
Скрипт отвечает как на POST, так и GET запросы. Разницы между ними нет.
Не используются новые html5 теги, но используются css3 для оформления прогресc-бара загрузок. Дизайн выполнен в минималистичном стиле без изображений (исключением является favicon). При отсутствии задач в центре страницы располагается поле для добавления адреса закачки, если задачи имеются - это поле смещается вверх страницы, и ниже располагаются задачи.
Все запросы - асинхронные (без перезагрузки страницы). Дизайн страницы - адаптивный:
Изменение состояния отображается также в заголовке вкладки (окна):
В нижней части документа располагается javascript-закладка ("Download this"), переместив которую в панель закладок браузера можно одним кликом добавлять новые задачи (при клике будет добавлена активная вкладка; если открыта вкладка с видеофайлом и будет нажата эта "закладка" на панели закладок - будет добавлена задача на скачивание этого видеофайла):
Весь javascript код документа расположен в файле core.js
. В верхней его части располагаются основные настройки:
updateStatusInterval
- интервал обновления данных на открытой вкладке (будьте аккуратны с этим параметром на слабых серверах);DebugMode
- режим отладки, выводится отладочная информация в console.log;prc
- путь до php скрипта серверной части.
Описывать функциональные момента смысла особого не вижу, но скажу - функции разделены на логические группы, скрипт не минифицирован, комментарии имеют место быть. Самое интересное на мой взгляд - это функция синхронизации данных, но рядом с ней и так написан комментарий (единственный на Русском).
- Скачать или склонировать крайнюю версию репозитория;
- Распаковать в директорию, доступную "извне";
- Изменить путь
define('download_path', BASEPATH.'/downloads');
вrpc.php
; - Открыть в браузере, проверить работоспособность. В случае возникновения ошибок - задайте вопрос.
- 0.0.3 - Релиз на гитхабе
Copyright (c) 2014 Samoylov Nikolay
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
- Библиотека jquery
- Парсер ссылок url.js
- Плагин уведомлений notifIt
- CSS3 progress bar