2002-05-18 19:08:56 UTC
ВНИМАНИЕ: Данная статья работает только для версии парсера 0001, для версии 0005 механизм установки слегка другой, более простой.
На net.ru наконец-то вняли мольбам пользователей и исправили кривизну с переменной окружения DOCUMENT_ROOT, которая теперь указывает на реальный корень веб-пространства. Следовательно, можно пропустить хитрые манипуляции касающиеся DOCUMENT_ROOT, описанные в этой статье и поэтому установка станет проще.
Для неопытных товарищей установка парсера 3 у данного провайдера может вызвать некоторые затруднения и поэтому я решил немного написать о том, как это делал я.
Сначала несколько вводных замечаний:
- У провайдера стоит операционная система FreeBSD 4.3, и для неё прекрасно подходят бинарики для FreeBSD 4.5, которые есть в разделе загрузок сайта 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. Эту версию можно либо создать самому из исходников, либо взять по ссылкам:
http://egorov2000.narod.ru/download/parser3_1_0_0001_freebsd45R_grpunlim_cgi.tar.gz — CGI без XML http://egorov2000.narod.ru/download/parser3_1_0_0001_freebsd45R_grpunlim_cgi_xml.tar.gz — CGI с XML
- С парсером используется только СУБД MySQL т.е. рассказывается об установке драйвера только для этой СУБД, хотя для PostgreeSQL всё делается аналогично и более того, можно в пределах одного сайта и даже одной страницы, работать с двумя этими СУБД.
- Основная кодировка в которой все файлы сайта и данные в БД – Windows-1251
Теперь о самой установке
- Копируем (в binary режиме по ftp) CGI скрипт parser3.cgi в каталог /cgi-bin и устанавливаем ему права 700 (это самые жесткие права), т.е. разрешение на чтение, запись и выполнение только для владельца файла.
- В этом каталоге (/cgi-bin) создаем 2 подкаталога: lib и parser3.charsets
- В /cgi-bin/lib копируем драйвер MySQL — libparser3mysql.so (если необходимо работать с другой СУБД, например PostgreeSQL, то в этот же каталог скопируйте файл libparser3pgsql.so)
- В /cgi-bin/parser3.charsets копируем файлы таблиц перекодировки: koi8-r.cfg, windows-1250.cfg, windows-1251.cfg, windows-1257.cfg
- В /cgi-bin создаем главный конфигурационный файл — parser3.conf
- В корне сайта (/) создаём конфигурационный файл сайта — parser3.conf
- В .htaccess назначаем parser3 обработчиком html файлов и устанавливаем переменные окружения HTTP_PARSER_ROOT_CONFIG и HTTP_PARSER_SITE_CONFIG, определяющие соответственно путь до главного конфигурационного файла и конфигурационного файла сайта.
Тексты файлов .htaccess, главного конфигурационного файла (ГКФ), конфигурационного файла сайта (КФС)
.htaccess
SetEnv HTTP_PARSER_ROOT_CONFIG /users/e/g/egoroff.spb.ru/html/www/cgi-bin/parser3.conf SetEnv HTTP_PARSER_SITE_CONFIG /users/e/g/egoroff.spb.ru/html/www/parser3.conf AddHandler parsed-html .html Action parsed-html /cgi-bin/parser3.cgi <Files ~ "\.(p|cfg)$"> Order allow,deny Deny from all </Files>
Пояснения:
Здесь для строчек начинающихся с SetEnv, путь до /cgi-bin/parser3.conf и /parser3.conf — это полный путь до корня веб-пространства сайта в файловой системе сервера и для его определения можно порекомендовать следующее:
- После копирования всех необходимых файлов в соответствующие каталоги, правильной установки разрешений для файла parser3.cgi, назначения parser3 обработчиком html файлов (пути при определении переменных HTTP_PARSER_ROOT_CONFIG и HTTP_PARSER_SITE_CONFIG можно пока писать любые) и создания обоих конфигурационных файлов, в КФС закомментируйте строчки касающиеся определения кодировок, т.е.:
#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).
- Раскомментируйте строчки КФС, касающиеся кодировок.
- Напишите правильный путь до соответствующих конфигов при определении переменных HTTP_PARSER_ROOT_CONFIG и HTTP_PARSER_SITE_CONFIG
- Полученный полный путь до корня веб-пространства используется и в ГКФ (см. ниже) при определении переменных $charsetsdir и $sqldriversdir.
Главный конфигурационный файл:
@auto[]
$charsetsdir[/users/e/g/egoroff.spb.ru/html/www/cgi-bin/parser3.charsets]
$sqldriversdir[/users/e/g/egoroff.spb.ru/html/www/cgi-bin/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::set{protocol driver client
mysql $sqldriversdir/libparser3mysql.so libmysqlclient.so}]
]
#for ^file:load[name;user-name] mime-type autodetection
$MIME-TYPES[^table::set{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[
# $.sendmail[your sendmail command goes here]
# these are tried when no "sendmail" specified:
$.prog1[/usr/sbin/sendmail -t]
$.prog2[/usr/lib/sendmail -t]
]
@unhandled_exception[exception;stack]
$response:content-type[
$.value[text/html]
$.charset[$response:charset]
]
<title>UNHANDLED EXCEPTION (root)</title>
<body bgcolor=white>
<font color=black>
<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>
}
}
Конфигурационный файл сайта:
@auto[]
#source/client charsets
$request:charset[windows-1251]
$response:charset[windows-1251]
$response:content-type[
$.value[text/html]
$.charset[$response:charset]
]
$from_doc_root_to_web_root[/e/g/egoroff.spb.ru/html/www]
$CLASS_PATH[^table::create{path
$from_doc_root_to_web_root/classes
$from_doc_root_to_web_root/classes/specific}]
$connect_string[mysql://имя:пароль@localhost/база]
Пояснения:
Поскольку на net.ru переменная DOCUMENT_ROOT (её значение можно получить вызовом $env:DOCUMENT_ROOT) не указывает на реальное местоположение корня веб-пространства, и у данного провайдера она равна /users, я ввел переменную $from_doc_root_to_web_root определяющую путь, ВНИМАНИЕ!: от DOCUMENT_ROOT до корня веб-пространства, — это необходимо для работы с абсалютными путями для доступа к файлам и каталогам. Без этой переменной, каждый раз при использовании абсалютного пути к файлу(каталогу), придется писать весь этот путь (от DOCUMENT_ROOT до корня веб-пространства).
Пример:
Вместо:
^table::load[$from_doc_root_to_web_root/dir/file.txt]
придется каждый раз писать:
^table::load[/e/g/egoroff.spb.ru/html/www/dir/file.txt]
Если у вас (у вашего провайдера) переменная DOCUMENT_ROOT как и положено (в доке по Apache) указывает на реальное местонахождение корня веб-пространства, то вам все эти замороки с дополнительной переменной не нужны и все будет немного проще.