RU 
Регистрация

хостинг: ValueHost 2.0
           

Помощь


Акции:

Бонус за друга!

Parser 3

Parser — это технология создания сайтов с помощью простого языка. Он немного сложнее HTML, но не требует особенного умения программировать. Parser начал создаваться в Студии Лебедева в 1997 году. Сегодня подавляющее большинство сайтов, создаваемых Студией Лебедева, делаются с его помощью.

Язык специально спроектирован и оптимизирован для того, чтобы было удобно создавать хорошие сайты. Работа с формами, cookies, табличными файлами, базами данных и XML — часть языка, а модульность языка позволяет легко наращивать функциональность.

Подготовка Веб-сервера и базы данных

Первое, что нам необходимо сделать - это получить доступ к SSH:

  • Панель управления -> SSH -> Устаналиваем пароль и флаг Вкл. (либо ограничиваем по IP)

Далее, создаем базу для нашего приложения:

  • Панель управления -> Базы данных -> MySQL или PgSQL на выбор
  • Запоминаем название базы, пароль, тип, и адрес сервера базы данных.

Создаем виртуальный сервер:

  • Панель управления -> Веб-серверы -> Создать новый:
    • Приложения на сервере -> PHP/CGI
    • Корневая папка -> htdocs
    • Папка cgi-bin -> cgi-bin
    • Имя Сервера -> mydomain.ru
    • Включить акселератор отдачи статического контента -> Вкл.
    • Индексные Файлы -> index.html
    • .htaccess -> Вкл.
  • Сохранить

Где:

cgi-bin — каталог, в котором будет находится обработчик Parser 3 и его конфигурация
htdocs — скрипты для Parser 3

 

Базовая установка Parser 3

Используя любой SSH клиент, заходим на сервер:

ssh my_admin_login@mydomain.ru

Где,

my_admin_login - Ваш логин администратора
mydomain.ru - Ваш домен либо технический адрес сервера

Устанавливаем Parser 3:

#cp /usr/local/bin/parser3 ~/cgi-bin/
#chmod 500  ~/cgi-bin/parser3

Вы также можете использовать собственную сборку parser3, но мы настоятельно рекомендуем использовать именно ту сборку, которая распположена на Вашем сервере. Узнать, для какой операционной системы Вам необходимо собирать parser3, Вы можете при помощи команды:

#uname -a

Создаем файл ~/htdocs/.htaccess следующего содержания: 

#назначение обработчиком .html страниц
AddHandler parser3-handler html
Action parser3-handler /cgi-bin/parser3

#запрет на доступ к .p файлам, в основном, к auto.p
<Files ~ "\.p$">
Order allow,deny
Deny from all
</Files>

На этом базовая установка Parser 3 закончена.

Проверяем работу Parser 3

Создаем файл ~/cgi-bin/auto.p следующего содержания:

@conf[filespec]
$confdir[^file:dirname[$filespec]]
$charsetsdir[/usr/local/etc/parser3.charsets]
$sqldriversdir[/usr/local/lib/parser3]

$CHARSETS[
#	$.koi8-r[$charsetsdir/koi8-r.cfg]
#	$.windows-1250[$charsetsdir/windows-1250.cfg]
	$.windows-1251[$charsetsdir/windows-1251.cfg]
#	$.windows-1257[$charsetsdir/windows-1257.cfg]
]
#change your client libraries paths to those on your system
$SQL[
	$.drivers[^table::create{protocol	driver	client
mysql	$sqldriversdir/libparser3mysql.so	$sqldriversdir/../mysql/libmysqlclient.so
pgsql	$sqldriversdir/libparser3pgsql.so	$sqldriversdir/../libpq.so
sqlite	$sqldriversdir/libparser3sqlite.so	-configure could not guess-
	}]
]

#for ^file::load[name;user-name] mime-type autodetection
$MIME-TYPES[^table::create{ext	mime-type
zip	application/zip
doc	application/msword
xls	application/vnd.ms-excel
pdf	application/pdf
ppt	application/powerpoint
rtf	application/rtf
gif	image/gif
jpg	image/jpeg
jpeg	image/jpeg
png	image/png
tif	image/tiff
html	text/html
htm	text/html
txt	text/plain
xml	text/xml
mts	application/metastream
mid	audio/midi
midi	audio/midi
mp3	audio/mpeg
ram	audio/x-pn-realaudio
rpm	audio/x-pn-realaudio-plugin
ra	audio/x-realaudio
wav	audio/x-wav
au	audio/basic
mpg	video/mpeg
avi	video/x-msvideo
mov	video/quicktime
swf	application/x-shockwave-flash
}]

$LIMITS[
	$.post_max_size(10*0x400*0x400)
]

#$MAIL[
#       $.sendmail[your sendmail command goes here]
#       these are tried when no 'sendmail' specified:
#               /usr/sbin/sendmail -t -i -f postmaster
#               /usr/lib/sendmail -t -i -f postmaster
#]


@fatal_error[title;subtitle;body]
$response:status(500)
$response:content-type[
	$.value[text/html]
	$.charset[$response:charset]
]
<html>
<head><title>$title</title></head>
<body>
<h1>^if(def $subtitle){$subtitle;$title}</h1>
$body
#for [x] MSIE friendly
^for[i](0;512/8){<!-- -->}
</body>
</html>


@unhandled_exception_debug[exception;stack]
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;
<pre>^untaint[html]{$exception.comment}</pre>
^if(def $exception.file){
	^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}
}
^if($stack){
	<hr/>
	<table>
	^stack.menu{
		<tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>
	}
	</table>
}
]


@unhandled_exception_release[exception;stack]
^fatal_error[Unhandled Exception;;

<p>The server encountered an unhandled exception and 
was unable to complete your request.</p> <p>Please contact the server administrator, $env:SERVER_ADMIN
and inform them of the time the error occurred, and anything
you might have done that may have caused the error.</p> <p>More information about this error may be available in the
Parser error log or in debug version of unhandled_exception.</p> ] @is_developer[] #change mask to your ip address $result(def $env:REMOTE_ADDR && ^env:REMOTE_ADDR.match[^^127\.0\.0\.1^$]) @unhandled_exception[exception;stack] #developer? use debug version to see problem details ^if(^is_developer[]){ ^unhandled_exception_debug[$exception;$stack] }{ ^if($exception.type eq "file.missing"){ # ^log404[] # ^location[/404/] $response:status(404) }{ ^unhandled_exception_release[$exception;$stack] } } @auto[] #source/client charsets $request:charset[windows-1251] $response:charset[windows-1251] $response:content-type[ $.value[text/html] $.charset[$response:charset] ] #For MySQL $SQL.connect-string[mysql://user:pass@host/db] #For PostgreSQL #$SQL.connect-string[pgsql://user:pass@host/db] #For sqlite #$SQL.connect-string[sqlite://db]

Скачать пример auto.p

Укажите настройки для MySQL:

$SQL.connect-string[mysql://user:pass@host/db]

Либо PostgreSQL:

 $SQL.connect-string[pgsql://user:pass@host/db]

Также, Вы можете взять стандартный файл конфигурации из дистрибутива и указать пути к необходимым библиотекам и драйверам самостоятельно.

Скачиваем архив со скрипт для тестирования https://www.parser.ru/off-line/download/utils/parser3test_russian.zip и распаковываем его в ~/htdocs/

Заходим на сайт https://mydomain.ru/_test.html и проверяем работу parser 3 (mydomain.ru — имя сервера, указанное при создании веб-сервера)

Необходимые файлы и библиотеки

Скомпилированный parser3 для Вашего сервера:

 /usr/local/bin/parser3

SQL драйверы:

/usr/local/lib/parser3/libparser3mysql.so
/usr/local/lib/parser3/libparser3pgsql.so
/usr/local/lib/parser3/libparser3sqlite.so

 Конфигурации кодировок:

/usr/local/etc/parser3.charsets/koi8-r.cfg
/usr/local/etc/parser3.charsets/windows-1250.cfg
/usr/local/etc/parser3.charsets/windows-1251.cfg
/usr/local/etc/parser3.charsets/windows-1257.cfg

Клиентские библиотеки:

/usr/local/lib/mysql/libmysqlclient.so — библиотека MySQL
/usr/local/lib/libpq.so — библиотека PostgreSQL

Пример объявления в auto.p:

$sqldriversdir[/usr/local/lib/parser3]
$charsetsdir[/usr/local/etc/parser3.charsets]

Документация

Полная документация: https://www.parser.ru/docs/lang/

Примеры: https://www.parser.ru/examples/