myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> Создание динамических страниц с помощью Lua, Пишем сайты на Lua

Теги
Нет тегов для показа
alex82
сообщение 15.3.2011, 4:11
Сообщение #1


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Бытует мнение, что для создания динамических сайтов на языке, отличном от php, необходимо убить уйму времени на написание соответствующего модуля для вебсервера, и извести метр нервов на сборку этого модуля с помощью кривого компилятора от фирмы "Майкрософт". Однако, это далеко не так - писать сайты можно на любом языке, для которого имеется консольный интерпретатор. Теоретически, можно написать сайт на Ассемблере, собрав полученную программу как консольное приложение. Законченные извращенцы могут попробовать сделать сайт на том мерзопакостном "языке программирования", что используется в командной строке Windows. Но сегодня мы не будем заниматься извращениями, и попробуем написать сайт на каком-нибудь более простом и понятном языке. А именно - на Lua.

Для этого нам понадобятся:
  • Web-сервер Apache с включенным модулем mod_cgi.
  • Интерпретатор Lua. В качестве интерпретатора можно взять сборку LuaForWindows - она предельно простая в установке, и содержит практически все библиотеки, которые могут понадобиться для написания сайта.
  • Редактор исходного кода для редактирования конфигов и написания скриптов.
  • Бутерброды, пиво.
  • Ну и конечно же прямые руки, растущие из плеч.

Итак, начнем.

Для начала откроем файл конфигурации Apache, и убедимся, что для директории, в которой будут лежать наши скрипты, разрешено управление конфигом при помощи файлов .htaccess:
Код
    AllowOverride All

Далее откроем эту директорию, создадим в ней файл .htaccess, и пропишем в нем 2 заклинания:
Код
Options +ExecCGI
Эта директива разрешает выполнение CGI-скриптов в данной директории.

Код
AddHandler cgi-script .lua
Эта директива сообщает Апачу о том, что файлы с расширением .lua являются CGI-скриптами.

Теперь создадим в этой же директории файл test.lua, и пропишем в первой строке путь к интерпретатору Lua (здесь и далее предполагается, что интерпретатор установлен в директорию C:\Program Files\lua):
Код
#!C:\Program Files\lua\lua.exe


Далее попробуем вывести в окно браузера какую-нибудь строчку. Для тех кто не в курсе поясню - общение между Апачем и CGI-приложением происходит через стандартные потоки. Для передачи данных Апачу используется stdout, а для получения тела сообщения CGI-приложением - stdin. Итак, пишем скрипт:
Код
io.write("Hello world!!!")
Пытаемся открыть наш скрипт в браузере, и... получаем ошибку 500 doubt.gif .

Судорожно лезем в лог ошибок апача в надежде выяснить причину ошибки, и видим там следующее:
Цитата
[Sun Mar 15 02:35:07 2011] [error] [client 127.0.0.1] Premature end of script headers: test.lua
Замечаем в сообщении знакомое слово "headers". Долго-долго думаем, что бы это могло означать... Нервничаем, кусаем бутерброд, запиваем его пивом... И тут нас осеняет: "Эврика, блеать, мы же не отправили заголовки!".

Исправляем наш скрипт:
Код
io.write("content-type: text/html\n\nHello world!!!")

Запускаем скрипт, и видим в окне браузера заветную строчку:
Цитата
Hello world!!!

Ура!!! Оно работает!!! Бутерброды съедены не зря, и пиво выпито не напрасно.

Продолжение следует...
Go to the top of the page
+Quote Post
DEN 007
сообщение 15.3.2011, 5:11
Сообщение #2


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 276
Регистрация: 23.3.2010
Из: РФ Смоленск
Пользователь №: 6 429
Спасибо сказали: 60 раз




alex82,
Спасибо, по сути заменив путь до интерпретатора, можно тоже самое запустить и на линуксе.
И еще наверное неплохобы отправить в заголовках кодировку, а то на русском будет несуразица..

P.S. Надо будет попробовать...
Go to the top of the page
+Quote Post
Setuper
сообщение 15.3.2011, 10:39
Сообщение #3


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Простые фразы можно так отсылать, а вот с построением сложных заголовков уже будет проблематично возиться, уж намного проще, когда это за тебя делает веб-сервер, а ты только заботишься о наполнении контекста.


Однако, как вариант данный метод сгодиться big_smile.gif
Go to the top of the page
+Quote Post
alex82
сообщение 15.3.2011, 10:54
Сообщение #4


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Setuper

Веб-сервер (во всяком случае Апач) не будет этим заниматься. От тупо отправит те заголовки, что передал ему скрипт, добавив в них заголовок с информацией о себе. При полном отсутствии заголовков он выкинет ошибку 500 и запишет "Premature end of script headers" в лог ошибок. Так что переложить всю работу на него не получится big_smile.gif.

Но можно автоматизировать этот процесс чтобы не возиться с составлением заголовков при написании каждой страницы. Как только решусь писать продолжение, напишу об этом.


Спасибо сказали:
Go to the top of the page
+Quote Post
DEN 007
сообщение 15.3.2011, 14:27
Сообщение #5


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 276
Регистрация: 23.3.2010
Из: РФ Смоленск
Пользователь №: 6 429
Спасибо сказали: 60 раз




alex82,
просто можно также писать сайты на луа, по принципу подключения файлов как в php к примеру, то есть один файл index.lua запускается а уже через него все работает, к примеру index.lua?do=hublist , и всю рутинную работу делать непосредственно в index.lua.
Go to the top of the page
+Quote Post
Invisible
сообщение 26.3.2011, 20:04
Сообщение #6


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 248
Регистрация: 14.7.2008
Из: Хабаровск
Пользователь №: 193
Спасибо сказали: 40 раз




Вообщем делаю вот так.

захожу в папку apache\conf открываю файл httpd.conf в ней у меня стоит следующее:
Код
<Directory "s:/appserv/www">
    Options Indexes FollowSymLinks MultiViews ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>


и
Код
    AddHandler cgi-script .lua .cgi .pl

Далее делаю дальше по инструкции.
Цитата
Далее откроем эту директорию, создадим в ней файл .htaccess, и пропишем в нем 2 заклинания:
Код
Options +ExecCGI

Создаю в папке www файлик .htaccess пишу туда Options +ExecCGI и сохраняю.
Далее...
Создаю в той же папке www файлик test.lua
Туда ввел пару строк:
#!C:\Program Files\lua\lua.exe
io.write("content-type: text/html\n\nHello world!!!")


Ошибки:
в apache\logs\error.log пишет ошибки
Цитата
[Sun Mar 27 03:55:08 2011] [error] [client 10.30.3.254] couldn't spawn child process: s:/appserv/www/test.lua
[Sun Mar 27 03:55:09 2011] [error] [client 10.30.3.254] File does not exist: s:/appserv/www/favicon.ico

а на браузере вот эта ошибка:
Цитата
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Apache/1.3.29 Server at localhost Port 80

При изменении конфига, apache перезапускаю.
И вот вопрос. Какие пальцы мне стоит выпрямить молотком, чтобы и молоток держать удобнее и чтобы все было нормуль. И де собственно мои корячки не так сделали? beat_plaster.gif
Go to the top of the page
+Quote Post
alex82
сообщение 28.3.2011, 0:58
Сообщение #7


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата
Apache/1.3.29 Server at localhost Port 80
Может дело не в руках вовсе? Бытует мнение что Apache 1 устарел.


Спасибо сказали:
Go to the top of the page
+Quote Post
Saymon21
сообщение 28.3.2011, 1:27
Сообщение #8


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




в мире так 2.2.16, имхо

alex82, кстати, тема таки интересная, полезная. Стоит ждать продолжения?big_smile.gif)
Go to the top of the page
+Quote Post
AltSide
сообщение 16.5.2011, 1:12
Сообщение #9


Абсолютный новичок


Группа: Пользователи
Сообщений: 5
Регистрация: 3.4.2011
Пользователь №: 9 078
Спасибо сказали: 0 раз




alex82, а расскажите пожалуйста, как работать с post запросами?
Т.е, обращаемся к вайлу index.lua, в форму post запроса вводим нужный IP, после чего нужно вызвать функцию, которая должна получить информацию об IP из mysql.

Покажите пожалуйста пример реализации.
Зарание спасибо.
Go to the top of the page
+Quote Post
DEN 007
сообщение 16.5.2011, 4:49
Сообщение #10


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 276
Регистрация: 23.3.2010
Из: РФ Смоленск
Пользователь №: 6 429
Спасибо сказали: 60 раз




Цитата(AltSide @ 16.5.2011, 2:12) *
alex82, а расскажите пожалуйста, как работать с post запросами?
Т.е, обращаемся к вайлу index.lua, в форму post запроса вводим нужный IP, после чего нужно вызвать функцию, которая должна получить информацию об IP из mysql.

Покажите пожалуйста пример реализации.
Зарание спасибо.

А почитать маны по луа?
Go to the top of the page
+Quote Post
Артём
сообщение 16.5.2011, 7:59
Сообщение #11


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 773 раза




DEN 007
а нормально ответить человеку слабо или это модно теперь посылать в «маны» ?
P.S. сам ответ знаешь или просто послал + отметился?
Go to the top of the page
+Quote Post
DEN 007
сообщение 16.5.2011, 9:20
Сообщение #12


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 276
Регистрация: 23.3.2010
Из: РФ Смоленск
Пользователь №: 6 429
Спасибо сказали: 60 раз




Цитата(Артём @ 16.5.2011, 8:59) *
DEN 007
а нормально ответить человеку слабо или это модно теперь посылать в «маны» ?
P.S. сам ответ знаешь или просто послал + отметился?

а я знаю что это можно найти в манах которые самолично читал на тему получения http запросов.
Go to the top of the page
+Quote Post
alex82
сообщение 16.5.2011, 22:33
Сообщение #13


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Давно хотел продолжить эту тему, но все никак руки не доходили.

Итак, низкоуровневые функции:
Прикрепленный файл  web.lua ( 6.21 килобайт ) Кол-во скачиваний: 60

Описание

Таблицы:

_SERVER - Окружение, полученное от web-сервера
_HEADERS - Заголовки HTTP. По умолчанию в таблице содержится один заголовок: content-type: text/html.
Все заголовки должны быть установлены до отправки каких-либо данных web-серверу.
На момент первой отправки данных в таблице должен содержаться как минимум один заголовок, в противном случае web-сервер сообщит о внутренней ошибке.
_GET - Переменные, полученные при помощи метода GET.
_POST - Переменные, полученные при помощи метода POST.
_REQUEST - Переменные, полученные при помощи методов GET и POST.
_COOKIE - Куки, сохраненные на стороне клиента.
_SET_COOKIE - Куки, которые необходимо сохранить на стороне клиента.
Каждое значение должно быть таблицей, содержащей собственно значение куки и время истечения в формате unix-epoch.
Если время истечения не указано, куки сохраняется до конца сессии.
Для удаления куки, установите его заведомо просроченным.

В таблицах _HEADERS,_GET,_POST,_REQUEST и _COOKIE все индексы хранятся в нижнем регистре.
Таблицы _SERVER,_GET,_POST,_REQUEST и _COOKIE заполняются данными лишь при необходимости, поэтому к ним нельзя применять функции pairs и next.


Функции:

echo(...) - Функция, использующаяся для отправки данных клиенту.
При первой отправке данных помимо самих данных отправляются заголовки, после чего добавление или изменение заголовков становится невозможным, а данная функция становится ссылкой на функцию io.write
print(...) - Функция, использующаяся для отображения произвольных значений. Результат помещается в теги <pre><code></code></pre>. Данную функцию необходимо использовать только в целях отладки.
tprint(tTable[, sTableName]) - Функция отображает содержимое таблицы tTable. Данную функцию необходимо использовать только в целях отладки.


Переменные:

_HEADERS_SENT - Переменная, определяющая, были ли отправлены заголовки. Менять значение этой переменной вручную не рекомендуется.

Пример использования

Код
#!C:\Program Files\lua\lua.exe

dofile("web.lua")

if not _REQUEST.mode or _REQUEST.mode == "main" then
    echo("Hello world!!!")
elseif _REQUEST.mode == "ip" then
    echo("Ваш IP: ",_SERVER.REMOTE_ADDR or "?")
elseif _REQUEST.mode == "useragent" then
    echo("Ваш User-Agent: ",_SERVER.HTTP_USER_AGENT or "?")
else
    echo("<center><h2>Кулхацкер, да?</h2><br>А ну-ка иди отседова по добру по здорову. Не то глазки красненькие повыковыриваю, да ручки шаловливые пообломаю.</center>")
end



Спасибо сказали:
Go to the top of the page
+Quote Post
Saymon21
сообщение 15.6.2011, 10:48
Сообщение #14


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




Кстати http://keplerproject.github.com/cgilua/index.html

Хочу дополнить.
Цитата
Теперь создадим в этой же директории файл test.lua, и пропишем в первой строке путь к интерпретатору Lua (здесь и далее предполагается, что интерпретатор установлен в директорию C:\Program Files\lua):

А тем, у кого lighttpd
Код
cgi.assign = (
".lua" => "/usr/bin/lua5.1"
)

Go to the top of the page
+Quote Post
alex82
сообщение 15.6.2011, 23:45
Сообщение #15


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Saymon21

Даже не буду ходить по ссылке. bad_smile.gif

После ковыряния в коде некоторых библиотек от Kepler Project, у меня появились серьезные сомнения отностиельно вменяемости его авторов.


Спасибо сказали:
Go to the top of the page
+Quote Post
Saymon21
сообщение 19.6.2011, 2:39
Сообщение #16


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




Мда... Встаки прав alex82. Фигня :(
Go to the top of the page
+Quote Post
OCTAGRAM
сообщение 17.8.2011, 19:06
Сообщение #17


Абсолютный новичок


Группа: Пользователи
Сообщений: 8
Регистрация: 14.4.2011
Из: Барнаул
Пользователь №: 9 140
Спасибо сказали: 5 раз




А в виде специализированного web сервера, как node.js есть что–нибудь дельное?
Go to the top of the page
+Quote Post
mariner
сообщение 17.8.2011, 19:20
Сообщение #18


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




а зачем?? Ненужно это от луа.
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Topic has attachmentsСоздание хаба
не получается
7 sadira 9 231 29.8.2017, 18:21 Посл. сообщение: Tsd
No New Posts Бан/глух с помощью клиента.
бан с помощью грея/флая
13 MeR 12 826 20.5.2014, 10:02 Посл. сообщение: Ksan
No New Posts Реклама хабов с помощью создание сборок
8 dj_crazy_joker 10 100 11.2.2012, 12:52 Посл. сообщение: dj_crazy_joker
No New Posts Создание текстовых квестов на LUA
0 Enyby 7 753 18.9.2011, 12:36 Посл. сообщение: Enyby
No New Posts От: Создание динамических страниц с помощью Lua
От темы с ID: 4750
0 Saymon21 4 875 22.5.2011, 21:13 Посл. сообщение: Saymon21
No New Posts DDoS с помощью YnHub
Средство защиты от DDoS на YnHub
2 Enyby 8 583 20.4.2011, 6:45 Посл. сообщение: Enyby
No new ВАЖНО: Topic has attachmentsСоздание Dll
40 Setuper 69 543 17.2.2011, 10:16 Посл. сообщение: Jonathan
No new Topic has attachmentsСоздание Контекстных Менюшек Средствами Клиента
38 Setuper 48 655 4.11.2010, 12:43 Посл. сообщение: Ksan
No New Posts Создание списка пользователей
0 STAJIKER 5 174 10.3.2010, 21:16 Посл. сообщение: STAJIKER
No New Posts Создание на основе DC бизнес приложения.
Доработать DC клиент и хаб для ведения коммерческой деятельности.
8 KAA 11 602 3.8.2009, 12:09 Посл. сообщение: Setuper
No New Posts От: Создание базы и юзера в MySQL
От темы с ID: 1828
1 Uncle_Dif 6 408 2.7.2009, 19:25 Посл. сообщение: Uncle_Dif
No New Posts ВАЖНО: Topic has attachmentsСоздание базы и юзера в MySQL
Для скриптов
2 mariner 21 197 22.4.2009, 21:52 Посл. сообщение: Otshelnik-Fm
Closed Создание Паролей.
2 Howl 7 038 15.3.2009, 17:41 Посл. сообщение: Howl

 



RSS Сейчас: 29.3.2024, 8:34