2002-09-25 18:07:21 UTC
В связи с выходом новой (0005) версии 3-го парсера и с тем что в ней произошли некоторые изменения, затрагивающие (облегчающие) процесс его установки, пожалуй я расскажу о том, как это делал я. Текст этой статьи будет похож на текст предыдущей статьи по установке 3-го парсера и он может быть полезен и при установке у других провайдеров.
Сначала несколько вводных замечаний:
- У провайдера стоит операционная система FreeBSD 4.3, и для неё прекрасно подходят бинарики для FreeBSD 4.6, которые есть в разделе загрузок сайта parser.ru.
-
Все веб документы, должны находиться в каталоге
/html
или его подкаталогах и имя подкаталога в каталоге/html
определяет имя сервера, например к документам в каталоге/html
надо обращаться поhttp://domen.ru/
, к документам в/html/www
надо обращаться поhttp://www.domen.ru/
и т.д. -
Парсер 3 будет находится в подкаталоге
cgi-bin
, веб-пространства, например если сайт находится в/html/www
то парсер будет лежать в/html/www/cgi-bin
. Далее в тексте я буду обращаться к корню веб пространства/html/www
как —/
, к/html/www/cgi-bin
как —/cgi-bin
и т.д. -
У этого провайдера необходимо использовать версию скомпилированную с отключенной опцией
--disable-foreign-group-files
. Эту версию можно либо создать самому из исходников, либо попросить у сотрудников Студии Лебедева: - С парсером используется только СУБД MySQL т.е. рассказывается об установке драйвера только для этой СУБД, хотя для PostgreeSQL всё делается аналогично и более того, можно в пределах одного сайта и даже одной страницы, работать с двумя этими СУБД.
- Основная кодировка в которой все файлы сайта и данные в БД – Windows-1251
Теперь о самой установке
-
Копируем по ftp (обязательно! в binary режиме) CGI скрипт
parser3.cgi
в каталог/cgi-bin
и устанавливаем ему права 700 (это самые жесткие права), т.е. разрешение на чтение, запись и выполнение только для владельца файла. -
В этом каталоге (
/cgi-bin
) создаем 2 подкаталога:lib
иcharsets
-
В
/cgi-bin/lib
копируем драйвер MySQL —libparser3mysql.so
(если необходимо работать с другой СУБД, например PostgreeSQL, то в этот же каталог скопируйте файлlibparser3pgsql.so
) -
В
/cgi-bin/charsets
копируем файлы таблиц перекодировки:koi8-r.cfg
,windows-1250.cfg
,windows-1251.cfg
,windows-1257.cfg
-
В
/cgi-bin
создаем/копируем конфигурационный файл —auto.p
. Тут хочу сделать небольшое замечание — это самый простой способ, хранение конфигурационногоauto.p
рядом с парсером, однако еслиcgi-bin
находится в веб-пространстве, это не самый лучший способ с точки зрения безопасности и поэтому в этом случае его лучше хранить вне веб-пространства. В случае если вы храните этот файл не рядом с парсером, вы должны написать полный путь к нему в качестве параметра конфигурационного метода@conf[]
определенного в конфигурационномauto.p
, если нет, то в качестве параметра этого метода можно (по-умолчанию) оставить filespec. -
В
.htaccess
назначаем parser3 обработчиком html файлов и устанавливаем переменную окруженияCGI_PARSER_CONFIG
, определяющую путь до конфигурационного файлаauto.p
.
Тексты файлов .htaccess
и конфигурационного файла auto.p
.htaccess
SetEnv CGI_PARSER_CONFIG /users/e/g/egoroff.spb.ru/html/www/cgi-bin/auto.p AddHandler parsed-html html Action parsed-html /cgi-bin/parser3.cgi <files ~ "\.p$"> Order allow,deny Deny from all </files>Пояснения:
Здесь для строчки начинающейся с SetEnv
, путь до /cgi-bin/auto.p
— это полный путь до корня веб-пространства сайта в файловой системе сервера и для его определения можно порекомендовать следующее:
-
После копирования всех необходимых файлов в соответствующие каталоги, правильной установки разрешений для файла
parser3.cgi
, назначения parser3 обработчиком html файлов (путь при определении переменнойCGI_PARSER_CONFIG
можно пока писать любой) и создания конфигурационного файла, в конфигурационномauto.p
закомментируйте строчки касающиеся определения кодировок, т.е.:#source/client charsets #$request:charset[windows-1251] #$response:charset[windows-1251] #$response:content-type[ # $.value[text/html] # $.charset[$response:charset] #]
-
Создайте в корне сайта файл
index.html
(название документа может быть другим если вы не используете для документа по умолчаниюindex.html
) -
Сделайте в этом файле следующий вызов поля класса env (определение переменной окружения PATH_TRANSLATED):
$env:PATH_TRANSLATED
-
Вы получите имя файла (
index.html
) с абсалютным путем до него (у меня этот вызов дает следующее —/users/e/g/egoroff.spb.ru/html/www/index.html
) -
Путь до
/index.html
(или любого другого файла) и есть искомый путь до корня веб-пространства (у меня это —/users/e/g/egoroff.spb.ru/html/www
). - Раскомментируйте строчки, касающиеся кодировок.
-
Напишите правильный путь до конфигурационного файла при определении переменной
CGI_PARSER_CONFIG
Конфигурационный файл auto.p:
@conf[filespec] # если конфиг auto.p лежит не рядом с парсером # определаяем этот метод типа так: # @conf[/users/e/g/egoroff.spb.ru/auto.p] $confdir[^file:dirname[$filespec]] $charsetsdir[$confdir/charsets] $sqldriversdir[$confdir/lib] $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 libmysqlclient.so #pgsql $sqldriversdir/libparser3pgsql.so libpq.so }] ] #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 png image/png tif image/tiff html text/html htm text/html txt text/plain 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[ $.prog1[/usr/sbin/sendmail -t] $.prog2[/usr/lib/sendmail -t] ] @fatal_error[title;body] $response:status(500) $response:content-type[ $.value[text/html] $.charset[$response:charset] ] <html> <head><title>$title</title></head> <body> <h1>$title</h1> $body #for [x] MSIE friendly ^for[i](0;512/8){<!-- -->} </body> @unhandled_exception_debug[exception;stack] ^fatal_error[Unhandled Exception (Debug); <pre>^untaint[html]{$exception.comment}</pre> ^if(def $exception.source){ <strong>$exception.source</strong><br> <pre>^untaint[html]{$exception.file^($exception.lineno^)}</pre> } ^if(def $exception.type){exception.type=$exception.type} ^if($stack){ <hr> ^stack.menu{ <tt>$stack.name</tt> $stack.file^($stack.lineno^)<br> } } ] @unhandled_exception_release[exception;stack] ^fatal_error[Unhandled Exception; <p>Произошла ошибка сервера из-за которой невозможно выполнить ваш запрос.</p> <p>Пожалуйста свяжитесь с администратором сервера, <a href="mailto:admin@domain.ru">admin@domain.ru</a> и информируйте его о времени когда произошла ошибка, и о ёё причинах.</p> ] @unhandled_exception[exception;stack] ^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] ] $CLASS_PATH[^table::create{path /classes /classes/specific}] $connect_string[mysql://имя:пароль@localhost/база]