Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: perl + mysql  (Прочитано 23331 раз)
0 Пользователей и 1 Гость смотрят эту тему.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« : 27-01-2007 02:55 » 

доброй ночи всем =)

подскажите пожалуйста, что не так.
пример скрипта взял из книжки.
Код:
#! /usr/bin/perl -w
use strict;
use DBI;
use CGI qw(:standard);
my ($dbh, $sth, $count);
$dbh = DBI->connect ("DBI:mysql:****;database=****", "****", "****", {PrintError=>0, RaiseError=>1});
$sth = $dbh -> prepare( "SELECT name, wins, losses FROM teams");
$sth -> execute();
print header(), start_html("team data");
$count = 0;

while (my @val = $sth->fetchrow_array())
{
   print p (sprintf("%s, %d, %d\n", $val[0], $val[1], $val[2]));
   ++$count;
}
print p( "$count "), end_html();
$sth -> finish();
$dbh -> disconnect();
exit(0);

если через ssh запускать то html код генерирует правильно.

Код:
Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>team data</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p>название = Fargo, победы = 36, поражения =16
</p><p>название = Winnipeg, победы = 24, поражения =26
</p><p>название = Minot, победы = 19, поражения =23
</p><p>название = Warren, победы = 16, поражения =30
</p><p>всего 4 строки</p>
</body>
</html>

а вот если попытаться запустить через "веб" ( типа  http://mysyte.com/cgi-bin/***.pl)
выдает ошибку

Код:
The server encountered an internal error or misconfiguration and was unable to complete your request.

подскажите пожалуйста...

P.S. права у файла 777
« Последнее редактирование: 28-01-2007 18:41 от CAHTA_ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 27-01-2007 10:08 » 

CAHTA_, смотри настройки Апача - это его ошибка. Посмотри логи. Чтобы перловые скрипты можно было запускать, в дирекории должно быть разрешено запускать CGI (см. ExecCGI) или, если перл работает как модуль, настроить по инструкции (см. опции модуля mod_perl).

Мне не удалось поработать с mod_perl, но в режиме CGI проблем не испытывал.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 27-01-2007 10:35 » 

первая мысль .htaccess


Добавлено через 3 минуты и 21 секунду:
google -->
http://willmaster.com/support/faq/
« Последнее редактирование: 27-01-2007 10:39 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 28-01-2007 01:18 » 

чтото не могу понять что и как =(
помогите пожалуйста. что именно и как настраивать апач?

из книжки взял скриптик для проверки доступа к модулям CGI.pm и DBI
работает.
Код:
#! /usr/bin/perl
use CGI;
use DBI;
$cgi = new CGI;
print "Объект CGI успешно создан\n";
@driver_names = DBI -> available_drivers();
print "Достыпные драйверы DBI: @driver_names\n";
exit(0);

P.S.
 в .htaccess в директории cgi-bin прописанна только одна строка
Код:
+ExecCGI
« Последнее редактирование: 28-01-2007 01:21 от CAHTA_ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 28-01-2007 14:35 » 

CAHTA_, во-первых, не "+ExecCGI", а "Options +ExecCGI". Во-вторых, установка опций в .htaccess регламентируется правами директории. Необходимые права - "AllowOverride Options". Надо заглядывать иногда в мануал!

Если имеешь доступ к правке конфига Апача, то поставь "Options +ExecCGI" прямо в конфиге на нужную директорию.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 28-01-2007 15:12 » 

вот только меня гложет сомнение, что не в CGI все дело, а в другом. так как у меня давно и отлично работают перловские скрипты со сторокой "use CGI".
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 28-01-2007 15:24 » 

CAHTA_, важно то, что они у тебя работают - значит настраивать ничего не нужно. Команды Перла на Апач не влияют.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 28-01-2007 15:26 » 

так в чем же тогда может быть трабла? понять не могу. из под шелла все норм работает, обрашение к БД, вывод информации.
а через вед - хрен. обидно.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 28-01-2007 15:59 » 

CAHTA_, работая как CGI нужно выводить HTTP-заголовок, завершающийся пустой строкой. Можно вывести просто пустую строку, т.к. Апач проверяет состав полей заголовка и добавляет недостающие.

Код: (Perl)
#!/usr/bin/perl

print <<EOF
Content-type: text/plain; charset=windows-1251

test
EOF
 

Добавлено через 13 минут и 46 секунд:
Более детально.

Я сделал на своем тестовом сервере следующие манипуляции в конфиге Апача:

1.
AddHandler cgi-script .pl
Это на уровне сервера.

2.
Options +ExecCGI
Это на уровне директории.

3.
Права 777 для файла с расширением .pl .

Если не вывести заголовок, пустую строку или вывести некорректный заголовок, то Апач выдает код 500 (Internal Server Error).
« Последнее редактирование: 28-01-2007 16:13 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 28-01-2007 17:06 » 

CAHTA_, работая как CGI нужно выводить HTTP-заголовок, завершающийся пустой строкой. Можно вывести просто пустую строку, т.к. Апач проверяет состав полей заголовка и добавляет недостающие.

Код: (Perl)
#!/usr/bin/perl

print <<EOF
Content-type: text/plain; charset=windows-1251

test
EOF
 

ты не поверишь. но на этот код у меня серв тоже ошибку выдает =)

я создал файл и вставил туда этот код. права 777

Добавлено через 4 минуты и 21 секунду:
Более детально.

Я сделал на своем тестовом сервере следующие манипуляции в конфиге Апача:

1.
AddHandler cgi-script .pl
Это на уровне сервера.

2.
Options +ExecCGI
Это на уровне директории.

3.
Права 777 для файла с расширением .pl .

Если не вывести заголовок, пустую строку или вывести некорректный заголовок, то Апач выдает код 500 (Internal Server Error).

все сделал как ты и писал, но все равно скрипт не выполняется.
« Последнее редактирование: 28-01-2007 17:11 от CAHTA_ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 28-01-2007 17:16 » 

CAHTA_, а рестартовать Апач не пробовал?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 28-01-2007 17:37 » 

угу. не помогло.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 28-01-2007 18:09 » 

Тогда смотри причину в логе. Еще лучше - лог сюда (не весь, а только часть, где сама ошибка и +- пару сообщений).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 28-01-2007 18:24 » 

*** - цензура =)

Код:
DBI connect('host=***;database=***','***',...) failed: Хосту '89.249.184.***' не разрешается подключаться к этому серверу MySQL at /opt/home/***/***/***/cgi-bin/***.pl line 6
[Sun Jan 28 21:17:28 2007] [error] [client 81.25.53.***] Premature end of script headers: /opt/home/***/***/***/cgi-bin/***.pl
[Sun Jan 28 21:17:28 2007] [error] [client 81.25.53.*** File does not exist: /opt/home/***/***/***/favicon.ico

favicon.ico -что эт такое понять не могу.!
« Последнее редактирование: 15-12-2007 20:27 от Алексей1153++ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 29-01-2007 06:55 » 

CAHTA_, забей - твоя трабла явно в первой строке и, как следствие, во второй строке.

Очень полезно использовать обработку ошибок, а не пускать все на самотек!
Например так:
Код: (Perl)
sub print_error_page($)
{
  print "....HTTP header";
  print $_[0];
  exit(0);
}

#.............

if ($dbh = DBI->connect ("DBI:mysql:****;database=****", "****", "****", {PrintError=>0, RaiseError=>1}))
{
  print_error_page("Can't connect to database: $dbh->errstr (${DBI::err})");
}

Добавлено через 3 дня, 2 часа, 54 минуты и 15 секунд:
Кто удалил тему? С какого, извиняюсь, ... ?

CAHTA_,  по логам это ты. Зачем?
« Последнее редактирование: 01-02-2007 09:49 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
CAHTA_
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 01-02-2007 10:28 » 

рашел проблему. точнее не я , а админ хоста=) там чтото с БД было ... вот так вот =(
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 01-02-2007 14:14 » new

Я тебе об этом же написал в посте №17.

А удалять тему зачем было? Тут не только твоя проблема, а целый комплекс маленьких общих проблем описан - может кому пригодится.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines