«Парсер» студии Лебедева и thttpd
Сегодня потратил часть дня, чтобы выяснить, что Парсер не заработает с thttpd.
Вообще, мне очень нравится
У меня Ubuntu 10.04, поэтому я всё поставил из пакетов, Парсер в том числе, пакет неофициальный, я его нашёл в разделе прислали пользователи.
После того как я всё настроил, ничего не заработало. Отладка через strace быстро показала, что Парсер падает. Я его перекомпилировал. Если будете перекомпилировать, вот мой рецепт.
Я поставил следующие пакеты (легко допускаю, что
В каталог
CPPFLAGS='-I/opt/pcre-8.12 -I/opt/pcre/include/' \
./configure --prefix=/opt/parser3/ --with-shared-gc --with-static-pcre=/opt/pcre
make
sudo make installПосле того как я стал пользоваться собранным мною Парсером,
Тут я догадался (поскольку в консоли не видел
Я создал небольшой
if(cgi) {
// few absolute obligatory
const char* path_info=getenv("PATH_INFO");
if(!path_info)
SAPI::die("CGI: illegal call (missing PATH_INFO)");
const char* script_name=getenv("SCRIPT_NAME");
if(!script_name)
SAPI::die("CGI: illegal call (missing SCRIPT_NAME)");
// … ещё много кода …
}При помощи CGI, написанного на bash, я выгрузил все переменные окружения, которые предоставляет thttpd (у меня версия 2.25b), оказалось, что двух последних переменных в дампе нет. Причём в интернете эта проблема уже поднималась (правда без связи с Парсером) и была успешна разрешена авторами thttpd. Наверное в последней версии
Добавлено: я
Добавлено ещё позже: так, по коду выходит следующее: если
При этом
Чтобы понимать:
http://example.org/cgi-bin/test.cgi — формируется SCRIPT_NAME, но не PATH_INFO и PATH_TRANSLATED
http://example.org/cgi-bin/test.cgi/ — формируется PATH_INFO и PATH_TRANSLATED, но не SCRIPT_NAMEИ ещё позднее: попробовал
Комментарии 4
/all/3157