Forum Webscript.Ru
Программирование => Perl => Тема начата: KhasDenis от 23 Сентября 2003, 12:59:15
-
Помогите разобраться ...
use CGI::Carp qw(fatalsToBrowser);
$g_thisscript = $ENV{SCRIPT_NAME};
if ($g_thisscript =~ /\\.(\\w+)$/) {$_ext = $1}
sub Ext {
my $file = shift;
my $result = $file . \'.\' . $_ext;
return $result;
} # sub Ext
eval {
($0 =~ m,(.*)/[^/]+,) && unshift (@INC, "$1");
($0 =~ m,(.*)\\\\[^\\\\]+,) && unshift (@INC, "$1");
require &Ext("arp3-config");
require &Ext("arp3-settings");
require &Ext("arp3-logs");
require &Ext("arp3-background");
require &Ext("arp3-customtags");
require &Ext("arp3-library");
require &Ext("arp3-locks");
require &Ext("arp3-dynamic");
require &Ext("arp3-login");
require &Ext("arp3-autoresponders");
require &Ext("arp3-broadcast");
require &Ext("arp3-backup");
require &Ext("arp3-display");
require &Ext("arp3-cookies");
require &Ext("arp3-validate");
require &Ext("arp3-mail");
require &Ext("arp3-trackingtags");
require &Ext("arp3-setup");
require &Ext("arp3-version");
require &Ext("arp3-profile");
require &Ext("arp3-subscribers");
require &Ext("arp3-mytags");
require &Ext("arp3-data");
require &Ext("arp3-menu");
require &Ext("arp3-links");
}; # eval
$g_thisserver = $ENV{SERVER_NAME};
$g_browser = $ENV{HTTP_USER_AGENT};
$g_settings = &db_select_row("SELECT * FROM $db_table_SETTINGS WHERE id=1");
%g_settings = %$g_settings;
$g_profile = &db_select_row("SELECT * FROM $db_table_OWN WHERE id=1");
&ReadInput;
$g_a0 = $INFO{a0};
$g_a1 = $INFO{a1};
$g_a2 = $INFO{a2};
$g_a3 = $INFO{a3};
$g_a4 = $INFO{a4};
$g_ret = $INFO{ret};
if (! $g_a0) {$g_a0 = $FORM{a0}}
if ($g_a0 eq "log")
{&Login}
# {print "Hello"}
elsif ($g_a0 eq "aut")
{&Autoresponders}
elsif ($g_a0 eq "cam")
{&Campaigns}
elsif ($g_a0 eq "fil")
{&Filters}
elsif ($g_a0 eq "tra")
{&TrackingTags}
elsif ($g_a0 eq "pro")
{&Profile}
elsif ($g_a0 eq "set")
{&Setup}
elsif ($g_a0 eq "ver")
{&Version}
elsif ($g_a0 eq "bro")
{&Broadcast}
elsif ($g_a0 eq "bak")
{&Backup}
elsif ($g_a0 eq "res")
{&Restore}
elsif ($g_a0 eq "cut")
{&MyTags}
elsif ($g_a0 eq "lnk")
{&Links}
else
{&Login}
&DoExit;
http://myHost/perl/arp3/arp3.pl?a0=log
по такому запросу открывается форма логина ...
ввожу логин и ... "The page cannot be displayed"
-
KhasDenis:
"The page cannot be displayed"
Значит, что адрес неправильный или настройки сервера не соотсветсятвующие, но со скриптом никак не связано.
Где строчка #!/usr/bin/perl ? Если запускаешь под mod_perl, то в скрипте есть опасные конструкции для этого.
зы: Лучше присылать лишь нужные части скрипта. А еще лучше сэмулировать проблему в более коротком и понятном стрипте. Если честно, то что я увидел подвергло меня в ужас.
-
ondr:
Значит, что адрес неправильный или настройки сервера не соотсветсятвующие, но со скриптом никак не связано.
бред какойто
KhasDenis:
скрипт после своей работы выдает "The page cannot be displayed"
это не скрипт выдает, а браузер.
надо отлаживать - смотреть что в поле a0 формы логина и смотреть соответствующую процедуру.
-
как я понял логику скрипта ... сначала инклюдятся определенные файлы, а потом в зависимости от запроса выполняется функция ...
в моем случае Login. Она находится в файле arp3-login.pl ... такой файл есть в системе, в той же папке .... если даже что то не так в функции, то я ожидал увидеть все что угодно только не "The page cannot be displayed" .... вот может настройки сервера не соответствующие? можно здесь по конкретней?
-
AliMamed:
бред какойто
KhasDenis:
то я ожидал увидеть все что угодно только не "The page cannot be displayed" .... вот может настройки сервера не соответствующие? можно здесь по конкретней?
Данное сообщение выводится лишь в то случае, если страница (сайт) отсутствует! И никак иначе!!!
Причин может быть море!
-
View source формы ....
-
[off]я в этом гоне больше не участвую. что я по этому поводу думаю и что делать я сказал[/off]
смотри субпроцедуру Login - почему она не отрабатывает при передаваемых параметрах
-
KhasDenis
Поменяй POST на GET в форме и ты сразу увидишь где у тебя ошибка:
а что бы далеко не ходить:
при передаче параметра action=\'/perl/arp3/arp3.pl?a0=log&a1=pro\' проверяется наличие в начале заголовка (http://) если его нет, то автоматически перед значением action вставляется URL текущей страницы в итоге форма активизируется на ссылку:
http://myHost/perl/arp3/perl/arp3/arp3.pl?a0=log&a1=pro
Естественно сервер не будет находить страницу
-
Похоже на фантастику, но скрипт перестал работать совсем :(
После моих в нем ковыряний, вернул старую версию ...
HTTP 500 -Internal server error.
Это в IE,
konqueror же пишет Software error:
Undefined subroutine : &Apache::ROOTwww....
Откуда браузер может взять эту информацию ? ему передается только код ошибки, или нет ?
Нашел в инете инфу, что проблема может быть в старой версии модуля CGI. Как мне глянуть мою ?
-
KhasDenis:
HTTP 500 -Internal server error
Чти логи, либо перенаправь вывод ошибок в броузер.
Нашел в инете инфу, что проблема может быть в старой версии модуля CGI. Как мне глянуть мою
Все тут:
$CGI::revision
$CGI::VERSION
либо посмотри в файле CGI.pm
Undefined subroutine : &Apache::ROOTwww....
Возможно CGI.pm тут не при чем.
-
сэмулировал проблему в более коротком скрипте:
-------------------------------------------------------
#! /usr/lib/perl
use CGI::Carp qw(fatalsToBrowser);
-------------------------------------------------------
таже ошибка ... perl у меня с дистрибутива Red Hat 7.3
-
Посмотр что в error_log.
Там и лежит твоя ошибка
-
в /var/log/httpd
есть пять файлов
error_log
error_log1
error_log2
error_log3
error_log4
все кроме четвертого пустые (((, а в четвертом последний лог от 25 августа
-
Если по дефолту то смотри здесь
/usr/local/apache/logs/error_log
-
нашел :)
Premature end of script headers : /var/www/cgi-bin/arp3/arp3.pl
и тоже самое для эмулированного скрипта
-
стоит в начале #!/usr/bin/perl?
заголовки выводит?
-
#! /usr/bin/perl стоит.
Как выводятся заголовки ?
-
use CGI qw(:standard);
print header();
-
#! /usr/bin/perl
. ^
-
у меня пробела нет, опечатка ....
В том скрипте который я разбираю(см начало топика) заголовки не выводятся. Но там куча инклюдов... наверно стоит поискать конструкцию которую ты указал
-
Если ты его броузером запускаеш то заголовки обязательны.
если нет то пробуй perl -cw tvoy_script.cgi
-
скрипты рабочие, так мне сказали те от кого они мне в наследство достались :)
поставил на одном хосте, по запросу
http://www.myhost.com/perl/arp3/arp3.pl?a0=log
появляется логин пейдж, а уже потом, после ввода пароля
HTTP 500 - Internal server error
в логах при этом
[Mon Sep 29 04:52:36 2003] null: DBD::mysql::st execute failed: MySQL server has gone away at /home/virtual/site81/fst/var/www/perl/arp3/arp3-data.pl line 51.
на локальных же двух машинах не добьюсь даже первой страницы
Software error:
Undefined subroutine &main::db_select_row called at /var/www/cgi-bin/arp3/arp3.pl line 78.
если бы была ошибка в скрипте - она была бы везде .... вроде так.
-
Вроде не так...
Что в /var/www/cgi-bin/arp3/arp3.pl строка 78?
-
$g_settings = &db_select_row("SELECT * FROM $db_table_SETTINGS WHERE id=1");
-
а db_select_row где находится?
-
эта функция в файле arp3-data.pl описана
---------------------------- arp3-data.pl -----------------------------------------
use DBI;
$global_dbh = DBI->connect("DBI:$_db_type:$db_name:$db_host", $db_login, $db_password, {RaiseError => 1, AutoCommit => 1 }) or die "Unable to connect to db";
sub db_connect {
my $result = $global_dbh;
return $result;
} # sub db_connect
sub db_execute {
my $sql = shift;
my $dbh = &db_connect;
my $sth = $dbh->prepare($sql) or die "Can\'t prepare $sql: $dbh->errstr\\n";
$sth->execute or die "Can\'t execute $sql";
return $sth;
} # sub db_execute
sub db_select_row {
my $sql = shift;
my $dbh = &db_connect;
my $sth = $dbh->prepare($sql) or die "Can\'t prepare $sql: $dbh->errstr\\n";
$sth->execute or die "Can\'t execute $sql";
my $result = $sth->fetchrow_hashref;
$sth->finish;
return $result;
} # sub db_select_row
-
напиши перед 78 строкой
require \'./arp3-data.pl\';
-
написал ...
вот ответ браузера
Undefined subroutine &main::ReadInput called at /var/www/cgi-bin/arp3/arp3.pl line 84.
-
не правильно файлы инклюдятся значит...
перл непонимает их конструкцию ?
-
все таки если вас не затруднит поясните почему с локальных серверов даже не открывается форма .... почему разные ошибки
-
удаленно с инклюдами все нормально, т.к. без добавления вашей строчки скрипт сам дошел до arp3-data.pl
-
Я этот скрипт не писал и откровенно в логике его разбираться мне не позволяет время. Читай-переводи ошибки и исправляй их