Как стать автором
Обновить

Комментарии 50

Неплохо. Взял посмотреть на стиль написания кода (в обучении главное — примеры).
Вот только парсинг лог-файла — это настоящий linux-way-костыль.
Погуглите в сторону DBus.
DBus порождает зависимости… Но за напоминание и отзыв — спасибо!
ладно, веб интерфейс к wget. я еще могу понять. но DBus к wget. аа!!!.. куда мир катится. :)
Если бы поменьше какой-то BUS был для реализации крос-процессного паттерна Observer/Observable, то было бы меньше шума?
и php (выбран как наиболее популярный)

что простите? откуда такая информация?
А по сабжу, мне кажется задача довольно надуманная. Насколько реальна такая ситуация, и как часто это может пригодится…
Извиняюсь что не совсем в тему, но тем кто ещё пользуется «чистым» wget, советую обратить свой взор на axel =)
Простите, но подача продукта у вашего Axel просто омерзительная.
Зачем guy для wget? Яннп
Поддерживаю.

Вся суть wget именно в обилии консольных опций, поддержке различных протоколов и тем что можно им пользоваться без GUI абсолютно везде.
Если в случае nmap с его GUI Zenmap плюшками являются преднастроенные наборы опций и это вроде как удобнее, то в данном случае подобный гуй урезает функциональность на столько что использование исходного продукта теряет всякий смысл. Тут либо делать преднастроенные паттерны, либо убирать wget как лишнюю зависимость =)

Имхо, конечно.
Итак, есть интерфейс в случае консоли вам выдают комбайн, который умеет еще и по POP3 почту читать, а автор реализовал давно забытый всеми ReGet / FlashGet и много их там было. С одной стороны конечно молодец, а с другой и правда непонятно кто и зачем его использовать будет. Если речь шла о восстановлении после сбоев, то тут любой маломальский HTTPConnection класс такое умеет и в PHP, Python, Java. А если речь идет о каких-то улучшениях, то тоже непонятно ни тебе зеркалирования (поиска зеркал) как в Orbit. Смахивает на лабораторную работу студента изучившего PHP. Но всеравно парень молодец.
Хотели спросить, зачем guy для wench или gui для wget?

На самом деле, в 99.9% случаев не нужно. Но зато красиво, браузер покидать не надо, консоль запускать тоже необходимости нет.
Можно же открыть в браузере и «сохранить как»?
Можно, я и не спорю.
Но автор топика уже написал про «Возможность удобного создания удаленных закачек, которые выполняются привычным wget-ом (можно спокойно увидеть их список при помощи ps)
Да и, в ряде сценариев, когда надо ограничить гостевого пользователя, вариант вполне рабочий. Для гостя есть возможность скачать файл в строго обозначенные директории (на флешку, например), для администратора есть возможность контроля закачек. Подробно этот вопрос даже не собирался сейчас прорабатывать, это же не мой топик) Вполне допускаю, при развитии идеи, создание некоего киоска самообслуживания с оболочкой в виде браузера строго во весь экран, где клиент может зайти на ресурс, найти необходимые файлы, закачать себе на флешку и, возможно, распечатать некоторые материалы. Понимаю что сценарий притянут за уши. Но опять же, топик не мой.

PS Надо было изначально отвечать на первый комментарий автора комментария „Зачем guy для wget? Яннп“, а то он свой отредактировал, а теперь мой смотрится глупо.
> Хотели спросить, зачем guy для wench или gui для wget?

Сколько лет уже можно обсуждать техническое задание? Ну хотелось мужику иметь WEB-интерфейс к загрузке файлов.
Если Вам не надо, так и проходите мимо. Знаете что на GitHUB более 15.1M репозиториев и я вам скажу многие Вам не нужны,
так что просто смиритесь с тем, что что-то вам не подходит(не нужно) и просто проходите мимо.

P.S. Меня конечно данная поделка заинтересовала на предмет «А как бы сделал я Web-интерфейс к ...?»
Она просто не настолько широко используется (хоть и часто) и меньше на слуху. Однако, это не мешает натыкаться на факт использования этой лицензии во множестве используемых, я уверен, и вами продуктах.
Лицензия MIT (опубликована, кстати, в 1988 году) во многом соответствует Лицензии BSD (Опубликована в 83-м), а полный текст шаблона лицензии выглядит так:

The MIT License (MIT)
Содержимое

The MIT License (MIT)

Copyright © [year] [copyright holders]

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the «Software»), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED «AS IS», WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

Из описания не понятно какой нужен веб-сервер (или на него нет зависимости? =)). Когда то мне понадобилась веб обвертка для git, тогда я обошелся nginx + fcgiwrap + bash. Может и тут обойтись без php можно?
Возможно вы удивитесь, но в теории — на веб-сервер нет определенной зависимости, главное — чтоб он умел обрабатывать php и имел права на запуск exec().
Думал как обойтись без php, но при выборе яп две стороны — нужно обрабатывать post/get запросы и формировать json (удобно+распространено php/perl/py), и работать с системой (bash/perl). Старый добрый перл в моем понимании выигрывает, но в нем, увы, не силен
Насчет сервера довольно спорно, так как php5.4+ имеет встроенный веб сервер. И зависимости может действительно не быть.
cgi + perl какой, вполне можно и без php…
Об этом было в частности написано в комментарии выше. Перл был бы пожалуй лучшим решением. Плюс на нем же можно сварганить свой веб-сервер в 80 строк :)
а можно код?
Source
#!/usr/bin/perl
 
use strict;
use warnings;
 
use LWP::Socket;
use FCGI::ProcManager qw/ pm_manage pm_pre_dispatch pm_post_dispatch /;
 
# Prepare headers
my $headers = "HTTP/1.1 %d OK\r\n"
            . "Server: FakeServer/2009-09-12\r\n"
            . "Content-Type: text/html\r\n"
            . "Content-Length: %d\r\n"
            . "Connection: close\r\n\r\n";
 
# Prepare and open socket
my $sock = new LWP::Socket();
die "Can't bind a socket" unless $sock->bind('127.0.0.1', '8080');
$sock->listen(10);
 
# Create 5 childs
pm_manage(n_processes => 5);
 
# Accepts a new connection
while ( my $socket = $sock->accept(10) ) {
    # Passing direction to child
    pm_pre_dispatch();
    # Default content
    my $content = "<html><body><h1>Hello from Habr</h1></body></html>";
    my $stat = 200;
    my $file_name;
    # Read from socket
    $socket->read( \$file_name );
    # Get wanted file name
    $file_name =~ s/GET \/([^ ]*) HTTP.+/$1/s;
 
    if ( $file_name ) {
        if ( -f $file_name and open FILE, '<', $file_name ) {
            # Read from file
            $content = join "", <FILE>;
            close FILE;
        }
        else {
            $content = "File not found";
            $stat = 404;
        }
    }
    # Puts headers and content into the socket
    $socket->write( sprintf( $headers, $stat, length $content ) );
    $socket->write( $content );
    $socket->shutdown();
 
    # Child's work complete
    pm_post_dispatch();
}
 
# Close socket
$sock->shutdown();

habrahabr.ru/post/69411/
Насчёт вебсервера, есть очень простой обход его необходимости.
Добавьте в rpc.php возможность запускаться из-под xinetd.
Я для похожей задачи делал как-то так

service ws
{
   port            = 8022
   socket_type     = stream
   wait            = no
   type = UNLISTED
   user            = root #внимание!, это надо поменять
   server          = /usr/bin/php5
   server_args = /root/ws.php
   log_on_success  += USERID
   log_on_failure  += USERID
   disable         = no
   #bind = 127.0.0.1
#       flags=REUSE
}


<?php
ob_start();

echo "test";

$r=ob_get_contents();
ob_end_clean();
resp($r);

function resp($d){
 $l=strlen($d);
 echo "HTTP/1.1 200 OK\r\n";
 echo "Content-Type: Content-Type: text/plain\r\n";
 echo "Connnection: close\r\n";
 echo "Content-length: {$l}\r\n";
 echo "\r\n";
 die($d);
}

Тело запроса читается из stdin;
Это были суровые времена VDS с 32МБ памяти, мы экономили как могли.
ух ты, спасибо за идею
пока допиливаете свой гуй, можете попользовать PyLoad. Паузы, мультипоточность, докачка, ограничение скорости, плагины, загрузка с youtube. Годная качалка, работает и на raspberry pi, и на настоящих десктопах
Что вам мешает выкинуть wget и скачивать файл на PHP?
Потому как стоит задача не «написать качалку файлов на php», а создать web-интерфейс для готового решения.
Более того, постоянно висящий в памяти php на много прожорливее wget-а.
Более того, ты имеем полный контроль над задачами, и работам с ними как с простыми процессами.
Что PHP прожорливее wget, верю, только это проблема что ли? У вас так мало памяти? «Чистый» PHP даст вам куда больший контроль над задачами, чем wget, если wget зависнет или упадёт, как вы это узнаете?

Кроме того, посмотрите на cURL multi exec — вот вам и решение проблемы с памятью.
Интересное решение, но не для web(internet). Т.к. выполнение ps, kill и даже wget — дырка размером с тоннель. Если полгода корпеть над selinux, acl и php-настройками то может быть и прокатило бы… но кому оно нужно?
Так что ИМХО, вы заменили UI-терминала на UI-браузера, больше ничего.
Всплакнул. Этому скрипту лет 10 точно есть. Пользовался еще в суровые времена ADSL, местных безлимитов и безлимитов на 64 кб/сек.
Что кстати не мешает этому скрипту быть отличным. Но он не вебдванольный™
А почему нельзя просто поднять ssh на домашней тачке и через него стартовать wget?
Еще кроме wget есть aria2… которая кроме http и ftp еще и торренты качает к примеру… и вроде даже какие-то готовые webgui к ней были…
было бы круто увидеть это в виде планюгина для owncloud…
*плагина 8)
Жесть-то какая!
А что, не судьба по ssh на удаленный сервер зайти и wget -b запустить?

Может у вас в загашнике и веб-морда для баша есть?
Вообще это писал для домашнего NAS-а. И, нет, не гусарское это дело каждый раз заходить и ssh запускать
А для кого alias'ы придуманы были? Элементарное нечто типа «wg » вызовет что-нибудь вроде «ssh someuser@somehost wgt », а скрипт wgt вызовет wget -b с записью куда-нибудь в директорию «all_shit_I've_download».

И не надо мне говорить о неосиляторстве ssh по ключам!
Тут намедни из ниоткуда возник проект Gooey — генератор графических интерфейсов к консольным приложениям (с автоматическим вытягиванием параметров и описаний из python). В принципе, идею веб-интерфейса можно обобщить не только на wget, но и на другие приложения.
А можно сделать конфиг-файл, чтобы не задействовались недоступные возможности?
Например, на embedded-системах вроде *wrt стоит busybox и wget реализована им. Но при этом набор параметров достаточно спартанский. Тот же прогрессбар, например, явно не регулируется (но при этом по дефолту все ж правильный).
Я вас не совсем понял… Не могли бы более четко выразить свои пожелания, и описать пункты, из-за которых вам не удается развернуть?
Возможности дефолтной реализации wget из busybox на *wrt невелики:

root@LibraryAP:~# wget --help
BusyBox v1.22.1 (2014-06-26 20:16:56 NOVT) multi-call binary.

Usage: wget [-c|--continue] [-s|--spider] [-q|--quiet] [-O|--output-document FILE]
	[--header 'header: value'] [-Y|--proxy on/off] [-P DIR]
	[-U|--user-agent AGENT] URL...

Retrieve files via HTTP or FTP

	-s	Spider mode - only check file existence
	-c	Continue retrieval of aborted transfer
	-q	Quiet
	-P DIR	Save to DIR (default .)
	-O FILE	Save to FILE ('-' for stdout)
	-U STR	Use STR for User-Agent header
	-Y	Use proxy ('on' or 'off')


Разные параметры вроде --progress-bar он не просто игнорирует, а выходит с ошибкой. Однако для успешной работы (т.е. чтобы уметь скачивать файлы) эти плюшки особо и не нужны.
Ох тыж ё… Я бы всё таки попробовал поставить не кастрированный wget и указать к нему путь в настройках, или как минимум подсунуть полноценный бинарник. Иначе — очень много придется переписывать.
Ну так-то да.
Только это уже будет не совсем «light»-вариант.
Я в своё время написал мульти-поточный менеджер закачек на php (curl), если интересно, могу скинуть сорцы.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.