Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Сеть > Созда свой http-сервер (всесто апача) на PHP |
Автор: szz 19.5.2006, 17:54 | ||||
Мне надобно написать свой веб-сервер, такой, который бы поддерживал PHP и все ![]() Думал, на чем его писать? На С++ переносимых (win/unix) решений не нашел, и решил писать... на PHP. Звучит абсурдно, но у меня получилось! Почти ![]() Вот как я провел эксперимент: создал папку "Comanche" (так я решил назвать свой сервер - в созвучность апачу ![]()
пишу потом в командной строке
и вижу в этом же черном окошке: Comanche started Потом запускаю браузер, захожу на "http://localhost:8080" И... о чудо! Вижу приветствие!!! Правда в сыром виде (Тэги <b> выпали как есть) Смотру в командную строку - вижу Replied to client 1 times В браузере пытаюсь снова зайти туда же... И браузер пишет "Соединение..." и "Невозможно отобразить..." А в командной строке - Replied to client 2 times! Опять рефрешу в браузере - "Невозможно отобразить..." В командной строке - Replied to client 3 times!!! Потом выключаю свой "сервер", в коде меняю порт (например на 8081), захожу с браузера по этому порту - и отять та же история - в первый раз отображается, в последующие - нет... Что это такое? Как заставить работать нормально? А также как мне достать строку запроса отправленную браузером (и ваще все хедеры, где перечисляются куки, юзер-агент и тд), чтоб соответствующим образом отреагировать? |
Автор: -=Ustas=- 19.5.2006, 21:41 |
Да ты шутник однако.... ну хоть посмеялся ![]() |
Автор: szz 19.5.2006, 23:17 |
Не задо иронизировать ![]() ![]() ![]() Нет, я вот доведу свой Каманч до совершенства - тогда и посмотрим ![]() Я видимо то-то в конце недоделываю - может ответ на запрос как-то неверно завершаю... Там есть какое-то правило - когда я писал Каманч в C++Buildere (признаюсь, был грешок ![]() ![]() |
Автор: Mal Hack 19.5.2006, 23:25 |
1. Комаче реальное ПО. 2. Задача - бред, по сути. Лучше силы потрать на что-то стоящее. Веб-сервер должен работать по принципу демона... |
Автор: szz 20.5.2006, 13:53 | ||||||||
Я и не претендовал на уникальность - я не намерен свою прогу где-то публиковать - это для собственных нужд.
Во народ! Как будто я спрашивал "прастити, моя задача - не брееед?..." Я конкретный вопрос задал: "почему неверно завершается ответ на запрос".
Никто никому ничего не должен. Веб сервер обычно бежит как демон (сервис в Win), но вполне может бежать как и консольная прога, хоть как гуи. Главное что прога сокет серверный запускает и слушает. Да, я знаю что сервера на PHP не пишут, но у меня такая задача. Вот, я задал тот же вопрос на англоязычном форуме - мне сразу ответили "You have to unbind the port at the end of the response - I don't know haw to do that in PHP, but here is an example in C++:..." - он ни слова не сказал по поводу того, что задача моя - бред по сути. Просто ответил на вопрос. Тут никто(как и вы) не знал ответ на мой вопрос! И тем не менее НИКТО не зашел и не написал "это бред" - кроме одного человека, в подписе которго написано:
Это ты специально себя так ведешь, чтобы подпись на людях проверять? ![]() Сам посуди: спрашиваешь ты например на форуме "скоко будет дважды два?" а тебе ответают "Умножение чисел - бред по сути. Лучше потрать время на что-то другое." Или другой человек отвечает "будет 4". Без всяких комментариев - просто ответ. Надеюсь моя тирада поможет усовершенствовать вашу этику участия в форумах ![]() |
Автор: szz 21.5.2006, 22:25 | ||||||||||||
Я уже разобрался - и написал свой http-сервер на php, который запускается из консоли и бежит в нем. Я прежде успешно писал веб-сервер на C++ Buildere, интерфейс которого был в гуи. Ну можно писать веб-сервер и запускать его из консоли или как гуи, можно, что я могу поделать, если это так? ![]() Что касается терминологий - демон - исключительно юниксовое понятие. В виндоуз аналог - сервис. Вот цитата из кюти:
А мой сервер можно запустить только если ты залогинен. Разлогинешся - он умирает. С терминами разобрались ![]()
Нее, отвечает браузеру - и дальше слушает - пока я ее не закрою или не разлогинюсь.
Если ты мне заплатишь за это столько сколько мои покупатели платят мне за мою прогу - с удовольствием напишу ![]()
Бесспорно (блин только заметил, что в слове "бесспорно" присутствует слово "порно" ![]() Хорошо, моя задача такова: Мне нужно написать переносимый (win/lin/mac) веб-сервер, который бы поддерживал php (mysql не нужен) и (самое главное!) запускался бы откуда угодно БЕЗ инсталляции, например записаный на CD (мне нужно запускать что-то вроде презентации, состоящей из пачки php-скриптов). Ну, вроде уже написал сервер на рнр, он вполне меня устраивает, зачем же омрачать это тем, что я нерационально подошел? Я уже записал его на СД с пачкой php-скриптов, которые мне нужны - все работает (там autorun - маленькая C++ прога, которая находит свободный порт после 8080, форкает мой консольный "сервер" слушать на этом порту и запускает браузер на http://localhost:8080)! Что, мне теперь это все выбросить, если тебе не нравится рациональность подхода? ![]() ![]() ![]()
С детства не люблю ябедничать ![]() Думаю это не настолько значительно - тем более каждый волен иметь свое мнение. Хотя, будь я не настолько уверен в своем, то твое "Задача - бред, по сути" (дя, разумется я это понял как как "Реализовывать задачу с помощью данной технологии - бред") могло меня сбить с панталыку и я бы сейчас не имел свое готичное решение ![]() Не, ты нормальный модератор, прсто иногда мне кажется не стоит быть столь категоричным к идеям людей, будь эти идеи даже бредовыми. Известно, что именно из бредовых идей рождается прогресс ![]() |
Автор: Mal Hack 21.5.2006, 23:15 | ||||
Да, ты можешь писать его, как гуй или кмд, но если он не работает как демон (процесс, который постоянно висит в фоне, ждя определенных событий в системе, причем это не только никсовое понятие), то никакого веб-сервера ты не получишь, т.к. суть структурного программирования заключается в последовательном выполнении кода до его конца. Я не думаю, что PHP сделали таким образом, что он после запуска через cmd продолжает висеть в фоне (по крайней мере тот код, который я видел выше этого делать не будет)...
Я серьезно говорил, между прочим. Вот блин, так бы сразу, е-мое... Вот есть у тебя Апач, мискул и т.п. Уже настроены. Тебе нужно просто их запускать с флэшки или СД0РОМа. Апач, Мискул прекрасно работают без установки... Поверь, не только у тебя такая проблема стоит. http://wboard.ru/topic869.html?hl=LoadWebServer Насколько я помню, там не последняя версия. В последней уже вроде бы почти все работало. В то время из-за сессии не удалось до конца довести дело. Писал на C++ BDS 2006. Прогресс не рождается из преда. Прогресс рождается из-за разумной лени, и создании чего-то НОВОГО. |
Автор: drupse 11.8.2009, 08:31 |
@zzz Ideu tvou prekrasno ponyal. Nado lish' uchest' chto functia fork dlya processov podderjivaetsya tol'ko v *nix. t.e. skajem esli konnectitsya neskol'ko clientov (ili neskol'ko zaprosov s odnogo browsera, tak kak kajdyi zapros idet v svoem podprocesse u bol'shinstva internet browserov). Vozmojno poetomu on vydaval oshibku posle pervogo zaprosa. Ne znau stream_socket_accept() bejit v tom je potoke ili v otdel'nom. Interesno bylo by uznat' kak ty spravilsya s zadachei, tak kak seichas v dlya svuh ser'eznyh CMS Drupal & Wordpress pishetsya jabber server na php integrirovannyi s yadre s CMS. @Mal Hack Interesno chitat', udivlen byl uznav chto ty v moderatorah. (po suti ne posovetoval parnu nichego putnogo, krome pary obsheizvestnyh ponyatiy) |
Автор: skyboy 11.8.2009, 09:52 |
drupse, под смайлами возле поля ввода сообщения есть галочка "транслит". откорректируй, будь добр, свое сообщение: читать транслит - глаза ломать. |
Автор: nerezus 11.8.2009, 13:27 | ||
Но ты выбрал наименеее подходящий ЯП(однопоточный), это неприменимо, если в скриптах будут выполняться длительные действия типа работы с сетью, БД и т.д. B прежде чем писать сервер под протокол, хотя бы охнакомился с базовыми особенностями протокола. Я ошибку исправил сразу. И тебе ее не скажу, т.к. дал всю информацию, как это сделать. В моем посте. Так что думай. |
Автор: Ипатьев 11.8.2009, 13:33 |
nerezus, за три-то года с момента создания темы уже всяко умер либо ишак, либо ходжа, либо эмир ![]() |
Автор: MoLeX 11.8.2009, 14:26 |
Ипатьев, тут не nerezus тему поднял а drupse, который кстати похоже и зарегистрировался тока из-за этой темы ![]() |
Автор: Vampir41k 12.8.2009, 03:23 | ||||||
Mal Hack,
в linux php вполне подходит под определение типа пруфлинк: http://habrahabr.ru/blogs/php/40432/
php (cli) есть для этого, например я использую php для системного администрирования, а не для веб кодинга...
если допилять то может даже получиться веб сервер для нескольких посетителей-) ps стал некропостером((( |
Автор: nerezus 12.8.2009, 04:41 |
Vampir41k, не надо отвкечать на цитаты 2006, человек тогда еще не разбирался в сабже =) Кстати ты упускаешь тоже одну вещь: если оно запскается на никсе, то уже имеет все ПОЛНОЦЕННЫЕ средства демонизации типа запуска в фоне и т.д. |
Автор: Pfailed 14.8.2009, 17:59 | ||
Расскажите поподробнее что вы имеете ввиду под полноценными средствами демонизации типа запуска в фоне? |
Автор: nerezus 14.8.2009, 18:01 |
Pfailed, пишется скрипт для запуска/останова/рестарта, кидается в нужный ранлевел. Для этого берется готовый(от того же апача) и в нем чистишь лишнее и пишешь 3 строки для твоего демона. |
Автор: szz 14.8.2009, 20:19 |
Забавно через 3 года в тему ответили. Причем 11-го августа. А это мой день рожденья! )))) drupse, выходит, меня поздравил ))) эх, три года... Когда-то я писал еще на PHP, прикол ))) я тогда еще и на JS, и на ActionScript, и на С++ писал, во балбес, мучал я свою бедну голову кучей разных языков )))) |
Автор: skyboy 14.8.2009, 22:42 |
szz, чем закончилась идея сервера на РНР? Видишь, люди беспокоятся, интересуются ![]() Добавлено через 7 минут и 24 секунды с прошедшим, кстати! |
Автор: szz 14.8.2009, 23:57 |
skyboy, ничем, я на вашем еврейском PHP больше ни-ни ))) теперь я пишу на совсем другом языке, который компилит мне и в php, и в js и в as и в c++ |
Автор: nerezus 15.8.2009, 00:24 | ||
|
Автор: MoLeX 17.8.2009, 05:49 | ||||
Оо, это какой такой?
с прошедшим ДР |
Автор: Pori 19.8.2009, 19:24 |
Секрет наверн =) Может на диаграммерах? Или на машине тьюринга? ![]() PS: с ДР |
Автор: szz 19.8.2009, 19:52 |
На французском! И очень странно , что на этом форуме нет раздела этого языка. Впрочем он и не нужен, потому что при кодировании вопросов почти не возникает ))) Что, серьезно не знаете что за язык такой? Это такой язык, название которого вас как бы посылает НаХ ))) догадались? |
Автор: Pori 19.8.2009, 20:08 |
Неужто ТеХ ? |
Автор: nerezus 19.8.2009, 20:10 | ||
|
Автор: MoLeX 20.8.2009, 05:38 | ||
|
Автор: szz 20.8.2009, 11:39 |
nerezus, это не 1C, это http://haxe.org/ |
Автор: Ипатьев 20.8.2009, 11:49 |
Насколько я понял из беглого просмотра описания языка, одну и ту же программу скомпилить и в php и в js невозможно. если уж даже для оператора вывода в стаут нужна php.Lib.print(), то говорить о кроссплатформенности рановато. |
Автор: Zmiuko 16.9.2009, 06:14 |
Лично я поддерживаю автора этой темы и полагаю, что стоит помочь! Сорри за флуд. ![]() |
Автор: SneG0K 16.9.2009, 07:26 |
По идее ничего стоящего не выйдет. Потому что, нельзя создать многопоточное приложение. Хотя на пару пользователей покатит))) |
Автор: perloid 16.9.2009, 10:21 | ||
На самом деле там можно писать Lib.print(), а пакет php. указывать только в начале файла. Простой пример: import php.Web; import php.Lib; ... var data=Web.getParams(); Web.setReturnCode(404); Lib.print("Not found"); Тот же код потом можно почти без изменений собрать для neko. |
Автор: SaNioK 23.11.2009, 02:38 | ||
Tебя жестоко обманули) Копай в сторону fork() ![]() |
Автор: nerezus 23.11.2009, 03:34 | ||
P.S. В следующий раз не надо сарказма в темах, в которых ты плохо разбираешься. Выглядит глупо ;) |
Автор: gcc 23.11.2009, 06:43 |
1) на php есть веб-сервера можно в гугле посмотреть 2) писали что даже быстрее чем apache 3) многопоточность на FreeBSD - говорят прошлое, высоконагруженный сервер можно реализовать на событий ядра в FreeBSD http://www.opennet.ru/base/dev/kevent_freebsd.txt.html есть API для perl http://search.cpan.org/~msergeant/IO-KQueue-0.32/KQueue.pm можно написать для и php, наверное |