parserALT
Страницы форума: ← Назад | 1 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 600 | Дальше →

Установка CGI без AddHandler (IdeaWebServer)

#1Janek
19.01.10 16:35 / 16:35
www.parser.ru → | ответить → | в избранное →

Установка CGI без AddHandler (IdeaWebServer)

Здравствуйте!

Знает ли кто-нибудь способ установить парсер в качестве CGI скрипта когда веб-сервер не поддерживает AddHandler и Action, но поддерживает cgi, mod_rewrite, php, perl, python.

Может быть какой-то подход с mod_rewrite?
Может кто-нибудь работал с IdeaWebServer?
#2Sumo
→ Janek [#1] | 19.01.10 16:42
www.parser.ru → | ответить → | в избранное →

Если веб-сервер не может установить в качестве обработчика страниц cgi-скрипт...

... то никак. Надо смотреть в документацию на сервер - может там есть такая возможность, но называется иначе.

Документации на английском как я понимаю нет?
#3Janek
→ Sumo [#2] | 19.01.10 16:57
www.parser.ru → | ответить → | в избранное →

другие скрипты

Но думал я что можно создать скрипт на perl или том что сервер поддерживает. Скрипт тот бы получал папку со страной в Parser3 через $request:query и потом выполнял parser3.cgi предавая эту страницу до parser3.cgi и тот что получил предавал бы в броузер.

Только ещё через mod_rewrite сделать что всё выглядело нормально.

Думаю хорошо?

Но по IdeaWebServer доки - можно сказать что - не существуют.
Только немножко на польском. Мне кажется что никто кроме одного польского хостера не используется нём. Но может быть что я не прав.

http://home.pl/dokumentacja/funkcjeserwera
http://translate.google.pl/translate?u=http%3A%2F%2Fhome.pl%2Fdokumentacja%2Ffunkcjeserwera&sl=pl&tl=ru
#4Sumo
→ Janek [#3] | 19.01.10 17:03
www.parser.ru → | ответить → | в избранное →
То, что Вы описываете скорее всего сделать можно (т.е. сделать промежуточный cgi-скрипт, который вызовет parser.cgi передав ему имя скрипта и установив переменные окружения по CGI-спецификации). Но у меня есть ощущение, что как "боевое" решение это не подойдет.
#5Janek
→ Sumo [#4] | 20.01.10 12:28
www.parser.ru → | ответить → | в избранное →

Parser в качестве интерпретатора скриптов

Мне кажется что не работает правильно. Просто вызываю в перле:

system("/cgi-bin/parser3/parser3.cgi /index.html");


Парсер возвращает:

"[Wed Jan 20 10:25:22 2010] [36930] Parser/3.4.0 (compiled on i386-unknown-freebsd6.4) [no request info]"

Почему?
#6Sumo
→ Janek [#5] | 20.01.10 13:16
www.parser.ru → | ответить → | в избранное →

С путями все правильно? Парсер в руте операционной системы файл /index.html найдет?

На самом деле надо понять меняет ли перловый вызов system рабочий каталог для Парсера. Есть подозрение, что надо будет передать полный путь к index.html.
#7Janek
→ Sumo [#6] | 20.01.10 13:31 / 13:32
www.parser.ru → | ответить → | в избранное →

С путями все правильно?

Теперь расположил я всё (parser3.cgi, test.pl, index.html) в одном каталоге: cgi-bin/parser3


system("pwd");

возвращает: /cgi-bin/parser3

system("ls");

возвращает:
auto.p
index.html
libparser3mysql.so
parser3.cgi
test.pl

system("./parser3.cgi index.html");
system("./parser3.cgi ./index.html");
system("./parser3.cgi < index.html");


всегда: no request info
#8Sumo
→ Janek [#7] | 20.01.10 13:35
www.parser.ru → | ответить → | в избранное →

Попробуйте указать полный путь...

... к файлу от корня файловой системы.
#9Janek
→ Sumo [#8] | 20.01.10 13:38 / 13:40
www.parser.ru → | ответить → | в избранное →

chrooted...

Проблема в том что я не знаю где я нахожусь

DOCUMENT_ROOT=/
SCRIPT_NAME=/cgi-bin/parser3/test.pl
SCRIPT_FILENAME=/cgi-bin/parser3/test.pl

http://es1.home.pl/cgi-bin/parser3/test.pl
h: es1.home.pl
u: es1
p: sadlkj230
#10Sumo
→ Janek [#9] | 20.01.10 13:44
www.parser.ru → | ответить → | в избранное →

Может сменить этот "необычный" хостинг? :)

#11Janek
→ Sumo [#10] | 20.01.10 13:46
www.parser.ru → | ответить → | в избранное →

нет

Сделал сайт для клиента который не может сменит хостинга.
#12Sumo
→ Janek [#11] | 20.01.10 13:46
www.parser.ru → | ответить → | в избранное →

А что говорит support? Может они подскажут как назначить cgi-обработчик?

#13Janek
→ Sumo [#12] | 20.01.10 13:49 / 13:53
www.parser.ru → | ответить → | в избранное →
Техподдержка не отвечает. Клиент хочет чтоб сайт заработал сегодня. Деньги уже дал, сайт не работает.

Может быть что я решу поставить сайт на своём аккаунте на лучшем хостинге, но владелец домена (другая персона) сказал что домен будет только указанный на тот необычный хостинг. Клиент сказал что демена не должно менять.
#14Sumo
→ Janek [#13] | 20.01.10 13:55 / 13:55
www.parser.ru → | ответить → | в избранное →

Сделать прокси на другой сервер?

Т.е. все запросы перекидывать через скрипт (например на PHP) на другой сервер на котором разместить сайт. В принципе не особо лучше варианта с запуском Парсера через Перл.

p.s. Наверное имеет смысл перед началом работы оговаривать с клиентом технические характеристики хостинга.
#15MoKo
→ Janek [#5] | 20.01.10 14:00
www.parser.ru → | ответить → | в избранное →

Надо указать несколько переменных окружениях

В форуме было. Например здесь:

«Lighttpd + Parser/3.2.1sp2 [посмотрели: parser3-lighttpd.cgi]»
http://www.parser.ru/en/forum/?id=39689

Если не ошибаюсь, в PATH_TRANSLATED должен быть
полный пусть к файлу на парсере, который надо обработать.
#16Janek
→ Sumo [#14] | 20.01.10 14:00
www.parser.ru → | ответить → | в избранное →
Может быть что сделаем proxy.

Клиент вред началом роботы сказал что ничего не знает. Что хостингом у него занимается сотрудник который расположит сайт на хорошим хостинге.
#17MoKo
→ Janek [#5] | 20.01.10 14:03
www.parser.ru → | ответить → | в избранное →

Или наоборот очистить

Чтобы парсер считал, что его запускают из shell. Тогда ваш код сработает. Очистить надо такие переменные:

// were we started as CGI?
cgi=
getenv("SERVER_SOFTWARE") ||
getenv("SERVER_NAME") ||
getenv("GATEWAY_INTERFACE") ||
getenv("REQUEST_METHOD");
#18Janek
→ MoKo [#17] | 20.01.10 14:08 / 14:08
www.parser.ru → | ответить → | в избранное →

хорошо очистил?

perl
$ENV{'SERVER_SOFTWARE'} = '';
$ENV{'SERVER_NAME'} = '';
$ENV{'GATEWAY_INTERFACE'} = '';
$ENV{'REQUEST_METHOD'} = '';
#19Janek
→ Janek [#18] | 20.01.10 14:17 / 14:25
www.parser.ru → | ответить → | в избранное →

заработало!

perl:
delete $ENV{'SERVER_SOFTWARE'};

Если вы видите эту страницу, значит вы установили Parser3 и пытаетесь его протестировать :)

Спасибо!
#20Janek
→ Sumo [#4] | 20.01.10 14:43
www.parser.ru → | ответить → | в избранное →

что с cookies?

print("Content-type: text/html\n\n");
delete $ENV{'SERVER_SOFTWARE'};
delete $ENV{'SERVER_NAME'};
delete $ENV{'GATEWAY_INTERFACE'};
delete $ENV{'REQUEST_METHOD'};

if (length ($ENV{'QUERY_STRING'}) > 0){
      $buffer = $ENV{'QUERY_STRING'};
      @pairs = split(/&/, $buffer);
      foreach $pair (@pairs){
           ($name, $value) = split(/=/, $pair);
           $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
           $in{$name} = $value; 
      }
 }

system("/cgi-bin/parser3/parser3.cgi ".$in{'p3'});


Такой скрипт на Перле работает слишком хорошо. $form работает. Но - что мне тепер делать чтоб $cookies тоже работало?
#21MoKo
→ Janek [#20] | 20.01.10 23:50
www.parser.ru → | ответить → | в избранное →

Боюсь придется идти по варианту "указать несколько переменных окружения"

Тогда они "сами собой" подцепятся - видимо работают только в CGI варианте вызова. Ну или парсить куки самому из переменных окружения (HTTP_COOKIE).
#22Janek
→ Sumo [#12] | 21.01.10 20:36
www.parser.ru → | ответить → | в избранное →

такая функциональность не представляется возможным осуществить

Мы хотели бы сообщить вам, что в связи с архитектурой нашего хостинга, такая функциональность
не представляется возможным осуществить.
#23Janek
→ MoKo [#21] | 21.01.10 20:46 / 20:50
www.parser.ru → | ответить → | в избранное →

что проще: CGI или интерпретатор скриптов?

Первые и другие заработало - но всё равно: не правильно

В качестве интерпретатора не работает $cookies и $form через POST.
В качестве CGI - когда что нибудь находиться в строке запроса (QUERY): Парсер говорит что "CGI: illegal call (1)".

Что в таком случае лучше делать?
#24MoKo
→ Janek [#23] | 21.01.10 21:58
www.parser.ru → | ответить → | в избранное →

Думаю несложно разобраться

В качестве CGI - когда что нибудь находиться в строке запроса (QUERY): Парсер говорит что "CGI: illegal call (1)".


Для диагностики проблемы вызывайте не парсер, а скрипт, показывающий переменные окружения.

#!/bin/sh
echo "Content-type: text/plain"
echo
env

Думаю мы подскажем, что там может не нравится парсеру.
#25Janek
→ MoKo [#24] | 21.01.10 22:19 / 22:21
www.parser.ru → | ответить → | в избранное →

тепер пробую - выглядить что мне удалось

Я сравнил что в $env на Apache с том что на "IdeaWebServer v0.6". Указал несколько переменных. Теперь заработало несмотря на то что нет такой возможности ;)

Работает:
form через post и get
cookies

Ещё только собраться с необычным mod_rewrite :( и будет хорошо

Большое спасибо за советы!!!

теперь такое у меня:
$ENV{'PATH_INFO'} = '/index.html';
$ENV{'PATH_TRANSLATED'} = $ENV{'PATH_INFO'};
$ENV{'SCRIPT_NAME'} = '/cgi-bin/parser3/parser3.cgi';
$ENV{'SCRIPT_FILENAME'} = $ENV{'SCRIPT_NAME'};
$ENV{'REQUEST_URI'} = $ENV{'PATH_INFO'};

if(defined($ENV{'QUERY_STRING'})){
	$ENV{'REQUEST_URI'} = $ENV{'PATH_INFO'}.'?'.$ENV{'QUERY_STRING'};
}

system("/cgi-bin/parser3/parser3.cgi");


Ещё подскажите мне: хорошо тот задачю делать на perl или лучше на php или python? Всё у них работает.

Ещё env прежде прежде ручного указания
REMOTE_HOST=CMPC009-076.CNet2.Gawex.PL
REMOTE_ADDR=84.205.9.76
REMOTE_PORT=2508
SERVER_NAME=es1.home.pl
SERVER_PORT=80
SERVER_ADDR=62.129.198.53
SERVER_ID=es1@home
SERVER_SOFTWARE=IdeaWebServer/v0.60
SERVER_PROTOCOL=HTTP/1.1
GATEWAY_INTERFACE=CGI/1.1
QUERY_STRING=
REQUEST_METHOD=GET
REQUEST_URI=/test2.pl
SCRIPT_NAME=/test2.pl
SCRIPT_FILENAME=/test2.pl
SCRIPT_URL=/test2.pl
SCRIPT_URI=http://es1.home.pl/test2.pl
DOCUMENT_ROOT=/
GATEWAY_ULTRACGI=011d3ce978098a5097ce73160527000d
HTTP_HOST=es1.home.pl
HTTP_USER_AGENT=Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_LANGUAGE=pl,en-us;q=0.7,en;q=0.3
HTTP_ACCEPT_ENCODING=gzip,deflate
HTTP_ACCEPT_CHARSET=ISO-8859-2,utf-8;q=0.7,*;q=0.7
HTTP_KEEP_ALIVE=300
HTTP_CONNECTION=keep-alive
HTTP_COOKIE=test=nie%20ma%20rzeczy%20nie%20mo%u017Cliwych
HTTP_CACHE_CONTROL=max-age=0
PATH=/bin
TMPDIR=/tmp
TMP=/tmp
FRONTPAGE_LWS_PATH=/.
SERVER_ADMIN=es1@es1.home.pl
CGI_PARSER_CONFIG=/cgi-bin/parser3/auto.p
#26MoKo
→ Janek [#25] | 21.01.10 22:40
www.parser.ru → | ответить → | в избранное →

на чем делать враппер

Ещё подскажите мне: хорошо тот задачю делать на perl или лучше на php или python? Всё у них работает.

Сложно сказать, зависит от того, реализована поддержка perl/php/python в виде модуля или в формате CGI. В виде модуля понятно быстрее будет. Если все в виде CGI - то заметной разницы нет - у perl медленный запуск только в случае необходимости компиляции большого количества исходников, чего у вас нет.

P.S. Удивило - $ENV{'PATH_INFO'} = '/index.html'; $ENV{'PATH_TRANSLATED'} = $ENV{'PATH_INFO'};
У вас index.html находится на диске по пути /? По-идее должно быть $ENV{'PATH_TRANSLATED'} = $ENV{'DOCUMENT_ROOT'}.$ENV{'PATH_INFO'};
#27MoKo
→ MoKo [#26] | 21.01.10 22:41
www.parser.ru → | ответить → | в избранное →

Гм.

Написал, и заметил, что действительно, у вас DOCUMENT_ROOT=/. Странная однако конфигурация. :)
#28Janek
→ MoKo [#26] | 25.01.10 14:35 / 14:37
www.parser.ru → | ответить → | в избранное →

враппер на перле - работает харошо

.htaccess
RewriteEngine on
RewriteOptions maxredirects=5

RewriteRule (.*)\.html$ parser3.pl
RewriteRule (.*)/$ parser3.pl
RewriteRule ^$ parser3.pl


parser3.pl
$parserDir = "/hidden/bin/parser3/";
$filename = $ENV{'SCRIPT_URL'};

#some rewrite rules (from apache's .htaccess)
#RewriteRule ^(.*/)n\.([0-9]*)/$ $1/?mod_news.id=$2 [L,QSA]
@matches = ($filename =~ m|(.*/)n\.([0-9]*)/$|);
if(scalar(@matches) == 2){
	$filename = @matches[0];
	$ENV{'QUERY_STRING'} = "mod_news.id=".@matches[1];
}


if(substr($filename,length($filename)-1) eq "/"){
	$filename = $filename."index.html";
}

$ENV{'PATH_INFO'} = $filename;
$ENV{'PATH_TRANSLATED'} = "/".$ENV{'PATH_INFO'};
$ENV{'SCRIPT_NAME'} = $parserDir.'parser3.cgi';
$ENV{'CGI_PARSER_CONFIG '} = $parserDir.'auto.p';
$ENV{'SCRIPT_FILENAME'} = $ENV{'SCRIPT_NAME'};

delete $ENV{'PATH_REDIRECTED'};
$ENV{'REDIRECT_URL'} = $ENV{'PATH_INFO'};

if(-e $ENV{'PATH_TRANSLATED'}){
	system($ENV{'SCRIPT_NAME'});
}else{
	print("HTTP/1.1 404 Not Found\n");
	print("Server: Parser3 Wrapper\n");
	print("Content-Type: text/html\n");
	print("Connection: Keep-Alive\n\n");
	print("<html><head><title>404 Not Found</title></head>");
	print("<body><h1>404 Not Found</h1><p>The request was not found on this server.</p>");

#	display env for debugging
#	print('<pre style="border: 1px solid #000; padding: 10px; background-color: #eee">');system("env");print("</pre>");

	print("</body></html>");
}


Большое спасибо для Moko и Sumo за советы и поддержку!
Страницы форума: ← Назад | 1 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 600 | Дальше →