Comments 77
Хабрапарсер покоцал кавычки.
Хм. Сообщил об ошибке. Типографизация внутри тега «code», мягко говоря, не эффективна :)
alexey.sveshnikov.ru/httpd.sh
вот здесь можно скачать этот скриптик в виде plan text.
вот здесь можно скачать этот скриптик в виде plan text.
«Here be dragons»
Сжатая версия: gist.github.com/alexey-sveshnikov/3a109b61ce6241770a86
Отформатированная: gist.github.com/alexey-sveshnikov/69d502aefd05a539c165
Отформатированная: gist.github.com/alexey-sveshnikov/69d502aefd05a539c165
Проверить бы его в реальных условиях. На том же баше, например :)
Насчет полноценности я бы поспорил :) Из всех возможных http-статусов только 200 и 404 поддерживается.
Bash — rulez!
Новость второй свежести. Да и сложно назвать это http-сервером на bash, ибо работает оно скорее благодаря netcat.
:)))
когда то был еще проект веб-сервера на пхп)
когда то был еще проект веб-сервера на пхп)
А пхп как работает без «родительского» серевера? Или там система сервер->пхп->сервер? )
Или там прогу юзали, которая из пхп исполняемый файл компилит?
Заинтриговали :)
Или там прогу юзали, которая из пхп исполняемый файл компилит?
Заинтриговали :)
насколько я понимаю он работает просто через пхп-интерпретатор.
скачать можно здесь — www.jaslabs.com/DownloadFiles/nanoweb_2.2.8.tgz
скачать можно здесь — www.jaslabs.com/DownloadFiles/nanoweb_2.2.8.tgz
пхп это полноценный язык програмирования, а потом уже модуль для апача и иже с ними…
Нет, конечно.
И вы сами убедились бы в этом, если бы те повторяли тупо эти байки для чайников, а хотя бы раз попробовали воспользоваться им как «полноценным языком». Там та-а-акие спецэффекты вылазят — мама не горюй! :)
Шаблонизатор — переросток, не более.
ЗЫ. Ой, щаз быдлокодеры понабегут-набегут. Которые сами ничего не пробовали сделать, но Рабинович им напел… про «полноценный языг», ага.
И вы сами убедились бы в этом, если бы те повторяли тупо эти байки для чайников, а хотя бы раз попробовали воспользоваться им как «полноценным языком». Там та-а-акие спецэффекты вылазят — мама не горюй! :)
Шаблонизатор — переросток, не более.
ЗЫ. Ой, щаз быдлокодеры понабегут-набегут. Которые сами ничего не пробовали сделать, но Рабинович им напел… про «полноценный языг», ага.
уж далеко не последний по полноценности.
я клиент торрента кстати на нем делал для кэширования на трекере. Правда я им сейчас не пользуюсь т.к. доводить до ума некогда, к тому же нашел хорошую альтернативу на perl.
я клиент торрента кстати на нем делал для кэширования на трекере. Правда я им сейчас не пользуюсь т.к. доводить до ума некогда, к тому же нашел хорошую альтернативу на perl.
а трекер (не веб морда, а именно трекер) тоже на ПХП написан.
а клиент, кстати, из командной строки запускается, ему http-сервер совсем и не нужен.
а клиент, кстати, из командной строки запускается, ему http-сервер совсем и не нужен.
А Вы, сами если и не быдлокодер, то на холиварщика точно похожи)))
C точки зрения машины Тьюринга очень даже язык программирования. Даже с запросом на ООП. Правда интерпретируемый.
Python — тоже интерпретируемый.
Языки просто разные. Разные возможности.
Или вы Basic не считаете языком программирования?
P.S. Я думаю негативное отношение к PHP возникает либо от неправильного понимания области его применения либо от огромного кол-во «быдлокодеров» на нем пишущего.
Python — тоже интерпретируемый.
Языки просто разные. Разные возможности.
Или вы Basic не считаете языком программирования?
P.S. Я думаю негативное отношение к PHP возникает либо от неправильного понимания области его применения либо от огромного кол-во «быдлокодеров» на нем пишущего.
Про полноту я ничего не говорил. И про бейсик тоже.
Понимание области применения пхп у меня правильное — шаблонизатор-переросток для изготовления домашних страничек.
Ну, эквивалентен машине Тьюринга. Так брейнфак тоже эквивалентен машине Тьюринга.
Ну, ООП спёрли из явы зачем-то совершенно бездумо… Особенно меня поразило зачем спёрли интерфейсы :)
Ну, трекер можно написать… Дык и на баше, вон, хттп-стервер можно написать, но это же прикол, а не повод :).
Чем скорее это кривое недоразумение издохнет, тем лучше будет.
Понимание области применения пхп у меня правильное — шаблонизатор-переросток для изготовления домашних страничек.
Ну, эквивалентен машине Тьюринга. Так брейнфак тоже эквивалентен машине Тьюринга.
Ну, ООП спёрли из явы зачем-то совершенно бездумо… Особенно меня поразило зачем спёрли интерфейсы :)
Ну, трекер можно написать… Дык и на баше, вон, хттп-стервер можно написать, но это же прикол, а не повод :).
Чем скорее это кривое недоразумение издохнет, тем лучше будет.
Почему-то я не поддерживаю вашего пессимизма )
PHP-шаблонизатор — это клише. Весьма необоснованное.
Я ведь не пытаюсь доказать, что PHP лучшие ли хуже Java, Ruby, Phyton, C (++). Ну разные возможности, отсюда разные сферы применения.
Насчет переростка для домашних страничек вы загнули. Перечислять крупные проекты, которые написанны на PHP?
Wikipedia, Digg, Flickr. Достаточно?
А то, что при неправильном проектировании от языка ничего не зависит? Тормоза twittera забыли?
По вашему MySQL — тоже жалкая и никому не нужная пародия на PostgreSQL (ORALCE, DB2, нужное подставить)?
PHP-шаблонизатор — это клише. Весьма необоснованное.
Я ведь не пытаюсь доказать, что PHP лучшие ли хуже Java, Ruby, Phyton, C (++). Ну разные возможности, отсюда разные сферы применения.
Насчет переростка для домашних страничек вы загнули. Перечислять крупные проекты, которые написанны на PHP?
Wikipedia, Digg, Flickr. Достаточно?
А то, что при неправильном проектировании от языка ничего не зависит? Тормоза twittera забыли?
По вашему MySQL — тоже жалкая и никому не нужная пародия на PostgreSQL (ORALCE, DB2, нужное подставить)?
>А то, что при неправильном проектировании от языка ничего не зависит?
Если вы перечитаете мой ответ, то, возможно, поймёте, что с этим я не спорил. И на баше можно хттп-сервер написать, повторюсь :). И тетрис на авке. И википедию на пхп. Вопрос в другом — зачем же так себя мучить? :) И, главное, зачем же так мучить тех, кто это потом поддерживать станет? :(
И возможности не при чём. Ну, есть там «возможности». Напихали, как в бейсик в своё время. Язык экстенсивного развития. Бездумная и безумная несистематизированая свалка всего на свете зачастую в нескольких экземплярах с уродским синтаксисом впридачу. Язык должен помогать программисту писать лаконичные, логичные, ясные и сопровождаемые программы. В _этом_ смысле пхп — полное дерьмо.
Если вы перечитаете мой ответ, то, возможно, поймёте, что с этим я не спорил. И на баше можно хттп-сервер написать, повторюсь :). И тетрис на авке. И википедию на пхп. Вопрос в другом — зачем же так себя мучить? :) И, главное, зачем же так мучить тех, кто это потом поддерживать станет? :(
И возможности не при чём. Ну, есть там «возможности». Напихали, как в бейсик в своё время. Язык экстенсивного развития. Бездумная и безумная несистематизированая свалка всего на свете зачастую в нескольких экземплярах с уродским синтаксисом впридачу. Язык должен помогать программисту писать лаконичные, логичные, ясные и сопровождаемые программы. В _этом_ смысле пхп — полное дерьмо.
Я даже не буду спрашивать почему он тогда так популярен.
Предвижу ответ: «PHP — для быдлокодеров».
Предвижу ответ: «PHP — для быдлокодеров».
Сто раз уже отвечали на этот вопрос — низкий порог вхождения.
Неужели из-за того, что это мощный, изящный, логичный и красивый язык программирования с ясным синтаксисом и чётко выстроеной парадигмой? :)
Холивар :)
Нет, это обычный молоток, чтобы забивать гвозди. Изящество ему никчему.
С другой стороны на нем сложно написать такой ужас (синтаксический), как на C, Perl, Python.
Нет, это обычный молоток, чтобы забивать гвозди. Изящество ему никчему.
С другой стороны на нем сложно написать такой ужас (синтаксический), как на C, Perl, Python.
Шуруп можно забить и камнем, но приятнее, полёзнее, качественнее и быстрее всё же вкрутить его шуруповёртом. Кстати, потом можно будет его и открутить если что, в отличии от. Да даже и гвоздь приятнее забивать качественным молотком с гладкой непроскальзывающей рукояткой и бойком из стали нужной твёрдости, чем куском мягкого плющащегося железа, периодически соскакивающего с занозистой и кривой палки-суковатки :).
Про синтаксический ужас я бы поспорил. По-моему, пхп сам по себе уже синтаксический ужас :(.
Про синтаксический ужас я бы поспорил. По-моему, пхп сам по себе уже синтаксический ужас :(.
за интерфейсы SPL — разработчикам отдельное спасибо
А при чём здесь SPL??? Это ведь библиотека?
Я про интерфейсы. Которые interface. Видите, вы даже не в курсе :). Вот и я в недоумении — зачем они нужны в динамическом интерпретируемом языке.
Я про интерфейсы. Которые interface. Видите, вы даже не в курсе :). Вот и я в недоумении — зачем они нужны в динамическом интерпретируемом языке.
Ну наверное для структурирования кода. И еще для множественного наследования.
Лишняя сущность. По-моему просто пёрли механизм ООП из явы, заодно прихватили и интерфейсы :) даже не подумавши почему без них (или аналога) невозможно жить в яве и почему они никому не нужны здесь.
Теоретически, можно волевым решением и угрозой увольнения заставить разработчиков «структурировать» код интерфейсами, но, по-моему, гораздо практичнее и полезнее заставить их писать документацию :).
Множественное наследование интерфейсов бесполезно при отсутсвии пользы от самих интерфейсов.
Теоретически, можно волевым решением и угрозой увольнения заставить разработчиков «структурировать» код интерфейсами, но, по-моему, гораздо практичнее и полезнее заставить их писать документацию :).
Множественное наследование интерфейсов бесполезно при отсутсвии пользы от самих интерфейсов.
айайай! Вы даже не удосужились глянуть на страницу www.php.net/~helly/php/ext/spl/ — страницу этой самой библиотеки.
Все дело в том, что эта библиотека дала возможность использовать нативные интерфейсы RecursiveIterator, IteratorAggregate, OuterIterator, Countable, SplObserver и достаточное количество абстрактных классов для построения сложных систем.
А нужны они по одной простой причине — для написания качественного, расширяемого кода.
Посмотрите limb, onPHP, mzz — сложные и интересные объектные струтктуры — и Ваш сарказм заметно поубавится :)
Все дело в том, что эта библиотека дала возможность использовать нативные интерфейсы RecursiveIterator, IteratorAggregate, OuterIterator, Countable, SplObserver и достаточное количество абстрактных классов для построения сложных систем.
А нужны они по одной простой причине — для написания качественного, расширяемого кода.
Посмотрите limb, onPHP, mzz — сложные и интересные объектные струтктуры — и Ваш сарказм заметно поубавится :)
на лимб не то чтобы смотреть, о нем думать страшно.
Лишняя сущность в динамических языках. Если бы её небыло ничего бы не изменилось. Что вы своей библиотекой? Какое она имеет отношение к конкретной языковой конструкции? То, что кто-то не поленился и понаписал их туда? :)
Я «пришел» в php из Flash/Flex, имея вобщем-то немалый «багаж» в архитектурировании приложений. Продирался довольно долго через отсутствие полноценного контекста приложения. Упрощал сам несколько раз решения, отказывался от шаблонов проектирования, к которым привык. Что-то вырисовал для себя, чем сейчас и пльзуюсь.
Интерфейсы абсолютно не лишние (по крайней мере для меня). Самый простой пример — инверсия зависимостей (базовые зависимости — это интерфейсные зависимости) Это отлично применимо и к динамическим языкам и к любым другим. Еще один пример — реализация паттерна Наблюдатель в интерфейсах. Отличная вещь, которая в купе с memcached, паттерном ActiveRecord и IdentityMap позволила выжить довольно сложному высоконагруженному проекту и показать производительность на 30% выше при прочих равных в сравнении с процедурным кодом.
А то, что кто-то не поленился — честь и хвала :)
Интерфейсы абсолютно не лишние (по крайней мере для меня). Самый простой пример — инверсия зависимостей (базовые зависимости — это интерфейсные зависимости) Это отлично применимо и к динамическим языкам и к любым другим. Еще один пример — реализация паттерна Наблюдатель в интерфейсах. Отличная вещь, которая в купе с memcached, паттерном ActiveRecord и IdentityMap позволила выжить довольно сложному высоконагруженному проекту и показать производительность на 30% выше при прочих равных в сравнении с процедурным кодом.
А то, что кто-то не поленился — честь и хвала :)
а когда-то и полноценный сервер на vb :)
Пусть он его сам и юзает xDDD
Это не больше, чем развлечение, практической пользы 0, имхо.
Это скорее искусство. Имхо.
Имхо бывают разные внештатные ситуации… Может когда и пригодится.
Данный вариант полезен, когда, например, необходимо раздать по-быстрому какой-либо файл.
Оригинальная идея вот: alexey.sveshnikov.ru/blog/2006/12/22/hint-9-swiss-army-knife/
Вот тут ещё это обсуждалось: www.opennet.ru/tips/info/1352.shtml
Оригинальная идея вот: alexey.sveshnikov.ru/blog/2006/12/22/hint-9-swiss-army-knife/
Вот тут ещё это обсуждалось: www.opennet.ru/tips/info/1352.shtml
Занятная идея. Порадовал :)
Насчет извращений: тетрис и арканоид на sed меня сильнее впечатлили :)
о, убийца лайти и энжиникса? =)
bash: nc: command not found
Жду версию с поддержкой многопоточности ;)
В генту опция -с, похоже, не поддерживается.
Понравилась идея nc -l -p 8080 < file. Вот уж действительно «раздать файл по-быстрому». Как ни странно, браузер воспринимает почти нормально.
В генту опция -с, похоже, не поддерживается.
Понравилась идея nc -l -p 8080 < file. Вот уж действительно «раздать файл по-быстрому». Как ни странно, браузер воспринимает почти нормально.
работает:
emerge net-analyzer/netcat -av
[ebuild R ] net-analyzer/netcat-110-r8 USE=«crypt -ipv6 -static» 0 kB
emerge net-analyzer/netcat -av
[ebuild R ] net-analyzer/netcat-110-r8 USE=«crypt -ipv6 -static» 0 kB
странно, у меня не работает. Может, я что-то не так делаю?
host ~ # emerge net-analyzer/netcat -av ... [ebuild R ] net-analyzer/netcat-110-r8 USE="crypt -ipv6 -static (-GAPING_SECURITY_HOLE%)" 0 kB ... host ~ # :; while [ $? -eq 0 ]; do nc -vlp 8080 -c'(r=read; e=echo;$r a b c; z=$r; while [ ${#z} -gt 2 ]; do $r z; done; f=`stat -c%s $f`»;$e; cat $f; else $e -e «$h 404 Not Found\n\n404\n»; fi)'; done $e «$o$c-Type: `file -ib $f`\n$c-Length: ` nc -h for help host ~ # nc -c nc: option requires an argument -- c nc -h for help host ~ # nc -c echo nc -h for help host ~ # nc -h | grep -- -c host ~ #
nc -h | grep — -c
-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
… попробуйте удалить, а потом заново установить програму
использую портежи с mirror.yandex.ru/gentoo-distfiles/ и оверлей sabayon
вот список патчей, которые применяются при установке:
* 00_all_unstripped.patch.bz2… [ ok ]
* 01_all_glibc_resolv_h.patch.bz2… [ ok ]
* 02_all_arm_timer.patch.bz2… [ ok ]
* 03_all_posix_setjmp.patch.bz2… [ ok ]
* 10_all_nopunt.patch.bz2… [ ok ]
* 11_all_nosleep.patch.bz2… [ ok ]
* 12_all_single_verbose_ipv6.patch.bz2… [ ok ]
* 13_all_use_getservbyport.patch.bz2… [ ok ]
* 14_all_read_overflow.patch.bz2… [ ok ]
* 15_all_help_write_to_stdout.patch.bz2… [ ok ]
* 20_all_inet_aton.patch.bz2… [ ok ]
* 21_all_udp_broadcast_ipv6.patch.bz2… [ ok ]
* 22_all_quit_ipv6.patch.bz2… [ ok ]
* 23_all_dash_port.patch.bz2… [ ok ]
* 24_all_sh_c.patch.bz2… [ ok ]
* 50_all_aes_crypto.patch.bz2…
-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
… попробуйте удалить, а потом заново установить програму
использую портежи с mirror.yandex.ru/gentoo-distfiles/ и оверлей sabayon
вот список патчей, которые применяются при установке:
* 00_all_unstripped.patch.bz2… [ ok ]
* 01_all_glibc_resolv_h.patch.bz2… [ ok ]
* 02_all_arm_timer.patch.bz2… [ ok ]
* 03_all_posix_setjmp.patch.bz2… [ ok ]
* 10_all_nopunt.patch.bz2… [ ok ]
* 11_all_nosleep.patch.bz2… [ ok ]
* 12_all_single_verbose_ipv6.patch.bz2… [ ok ]
* 13_all_use_getservbyport.patch.bz2… [ ok ]
* 14_all_read_overflow.patch.bz2… [ ok ]
* 15_all_help_write_to_stdout.patch.bz2… [ ok ]
* 20_all_inet_aton.patch.bz2… [ ok ]
* 21_all_udp_broadcast_ipv6.patch.bz2… [ ok ]
* 22_all_quit_ipv6.patch.bz2… [ ok ]
* 23_all_dash_port.patch.bz2… [ ok ]
* 24_all_sh_c.patch.bz2… [ ok ]
* 50_all_aes_crypto.patch.bz2…
извращение — читать это без нормального форматирования
Не честный пример, так как использует NetCat для управления соединениями.
Чисый bash http сервер, тем не менее, возможно написать используя /dev/tcp/127.0.0.1/80 (очевидно, что bash должен быть скомпилирован с этой фичей, на ubuntu без нее к сожалению)
Чисый bash http сервер, тем не менее, возможно написать используя /dev/tcp/127.0.0.1/80 (очевидно, что bash должен быть скомпилирован с этой фичей, на ubuntu без нее к сожалению)
насколько данный гениальный скрипт будет работоспособен в системах, отличных от linux — таких как solaris, hpux, bsd?
Скрипт юзает специфическую опцию нетката, которую я встречал только на некоторых линуксах. В принципе, в ней нет ничего сложно и накатить патчик можно в какой угодно системе. А баш и так везде есть.
Наверное я единственный кто не понял тут ни слова
это напоминает конвеер из лего, для сбора машинок из лего.
прикольно, весело, нихрена не полезно.
прикольно, весело, нихрена не полезно.
Sign up to leave a comment.
HTTP сервер на bash