IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Страничка на Perl (https://www.imho.ws/showthread.php?t=89087)

Naked 12.07.2005 19:16

Страничка на Perl
 
Такая проблема: я создал страничку на Perl'e (#!/usr/bin/perl print "asdfsaf";), а броузер мне говорит
Цитата:

You don't have permission to access /1/index.cgi on this server
Хотя права 777, как можно это исправить? :help:
И еще, как можно прочитать переменные посланные методом POST или GET скрипту? И как можно открыть pop-up окно методами Perl'а? И есть ли аналог pg_connect в Perl'e и вообще, поддержка базы Postgres?

Ghost 13.07.2005 07:10

The_naked
Не забываем о передаче хэдера:
Код:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "asdfsaf";

Для получения request-параметров создавай ассоциативный массив:
Код:

if ($ENV{'REQUEST_METHOD'} eq "POST") {
  read(STDIN, $bufer, $ENV{'CONTENT_LENGTH'}); }
else {
  $bufer=$ENV{'QUERY_STRING'}; }   

@pairs = split(/&/, $bufer);
foreach $pair (@pairs) {
  ($name, $value) = split(/=/, $pair);
  $name =~ tr/+/ /;
  $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $FORM{$name} = $value; }

Далее, если передан запрос "?a=blablabla", то получить значение можно, обратившись: $FORM{'a'}.
Pop-up окно открывается средствами JS - просто формируй перлом соответствующую HTML-страницу (сам прикинь: скрипт на перле выполняется на стороне сервера, а поп-ап открывается у клиента).
Насчет Postgres ничего сказать не могу кроме того, что у меня валяется какая-то библиотека к перлу под названием "Persistence-Object-Postgres". Может это оно и есть... Могу поделиться - стучи в ПМ.

З.Ы. Кстати http-сервер должен знать, что делать с перл-скриптами (не передавать тупо их текст клиенту, а выполнять). Посмотри настройки.

З.З.Ы. И еще сюда же: в опциях директории должен быть указан параметр ExecCGI (если у тебя стоит Apache).

Naked 13.07.2005 08:42

Спасибо. И тогда еще один вопрос, может правда не в тему. Можно ли выбрав все записи из таблицы узнать название самих колонок...и сколько их соответственно? Ну да, и вопрос про Postgres остается в силе... :help:

Ghost 13.07.2005 09:53

Так я нахожу количество и имена колонок при работе с Oracle и mySQL:
Код:

use DBI;
my $dbh = DBI->connect("реквезиты базы данных") || die print "$DBI::errstr\n";
my $query = "какой-недь запрос";
my $sth = $dbh->prepare($query) || die print "$DBI::errstr\n";
$sth->execute || die print "$DBI::errstr\n";
my $col_cnt = $#{$sth->{NAME}};
my @columns = [];
for (my $i = 0; $i <= $col_cnt; $i++) { $columns[$i] = $sth->{NAME}->[$i]; }
...
$sth->finish();
$dbh->disconnect();

Насчет Postgres все еще ничего сказать не могу... :idontnow:

Naked 13.07.2005 17:42

Большое спасибо, но может кто-нибудь знает, как заюзать библиотеку Postgres'а? Т.е. вместо DBI->connect писать что-то типа pg_connecr (как в PHP) :help:

Saruman 13.07.2005 19:52

The_naked
Где ты нашел в перле какую библиотеку постгреса? Все через DBI юзается. При установленном DBD::Pg, ессно:
CPAN DBD:Pg
Example Perl - PostgreSQL connection

Goryn 16.07.2005 00:34

Цитата:

Сообщение от The_naked
Хотя права 777

Вообще-то на CGI-скрипты ставятся права 755.

777 ставится на текстовые файлы, в которые что-то пишут скрипты. Или на каталоги, в которых скрипты должны создавать файлы.

Panoramus 26.07.2005 01:27

Цитата:

Сообщение от Goryn
Вообще-то на CGI-скрипты ставятся права 755.

777 ставится на текстовые файлы, в которые что-то пишут скрипты. Или на каталоги, в которых скрипты должны создавать файлы.

да да, меня тоже забавляет эта умная возня, когда даже чмод не выставлен нормально :)

J`JF 02.08.2005 10:37

Вообще-то, если скрипт не исполняется с 777, то 755 ему явно не поможет.
Вероятно, проблема все же именно в конфигурации апача, или же, как вариант, в правах на 1, а то и вообще зарыть где-то внутри .htaccess, валяющегося где-то по дороге.

xse15 03.08.2005 01:41

Цитата:

J`JF:
Вообще-то, если скрипт не исполняется с 777, то 755 ему явно не поможет.
Если на сервере используется su_exec то очень даже может помочь,
http://httpd.apache.org/docs/1.3/suexec.html пункт 16.
А вообще-то нужно смотреть в error-log сайта и suexec.log (или как он у вас обзывается) там на 80% найдется ответ на вопрос.

Ale 03.08.2005 04:11

Насчет 777 - 100 пудов, поставь 755

Насчет You don't have permission to access /1/index.cgi on this server
Начни с начала - cgi в отличие от php не исполняется где-ни-попадя, если хостер разрешает запускать скрипты только из cgi-bin так оно и будет. Если ты сам себе хостер - пропиши в htaccess соотв директиву:

Options +ExecCGI


Часовой пояс GMT +4, время: 06:54.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.