Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Проблема с Apache (http://forum.oszone.net/showthread.php?t=50935)

SantaXP 24-06-2005 15:06 335795

Проблема с Apache
 
Возникла проблема с Апачем под FreeBSD. Значит так, html страницы из htdocs отображаются нормально, а вот скрипты CGI и PL в браужере отображаются лишь html кодом и не более. В чём проблема - понять не могу, надеюсь на ваш опыт и что вы мне поможете. Спасибо за внимание.
-----
Код страницы:
#!/usr/local/bin/perl5
use CGI::Carp qw(fatalsToBrowser);
print qq(
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Yo-Ho-Ho Mother fuckers!!!</title>
</head>
<body text="red">
<p align="center">
<img src="images/logo.png" width="300" height="50" border="0" alt="Yo-Ho-Ho" align="middle" />
</p>
<p><font face="Verdana" size="2" color="black">23 june 02:05 nigth</font></p>
<div align="left"><font face="Verdana" size="2">Welcome to my fucking web-sait! I'm glade to see
you, dear (ip). So, if you like my dizaign
- please, push the button, if else - go fuck your self some of bitch!!! Well, you know, it is not
a simple thing to create, to create saits, programms or anything else. For what I write these
bullshit??? He... I really don't know, so fuck off - I'm going to sleep.</font></div>
</body>
</html>
);
-------------
Текст, который отображается в браузере:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Yo-Ho-Ho Mother fuckers!!!</title>
</head>
<body text="red">
<p align="center">
<img src="images/logo.png" width="300" height="50" border="0" alt="Yo-Ho-Ho" align="middle" />
</p>
<p><font face="Verdana" size="2" color="black">23 june 02:05 nigth</font></p>
<div align="left"><font face="Verdana" size="2">Welcome to my fucking web-sait! I'm glade to see
you, dear (ip). So, if you like my dizaign
- please, push the button, if else - go fuck your self some of bitch!!! Well, you know, it is not
a simple thing to create, to create saits, programms or anything else. For what I write these
bullshit??? He... I really don't know, so fuck off - I'm going to sleep.</font></div>
</body>
</html>
Дата: 24-06-2005 на 15:07

archy 25-06-2005 14:42 336043

Надо первой строкой отдать браузеру заговок:
Код:

print "Content-Type: text/html\n\n";

mar 25-06-2005 17:13 336079

и еще:
где лежит Perl-скрипт и какие права на него выставлены?

SantaXP 25-06-2005 22:29 336120

Спасибо, я попросту забыл прописать эту строку в скрипте. Всем спасибо, как говориться - отбой! :)

SantaXP 26-06-2005 23:53 336311

Разобравшись с отображением скриптов в браузере и при изучении в тоё же книги ("Разработка CGI-приложений на PERL") я столкнулся с новой проблемой...
---
И так. В одном из первых примеров скриптов в книге даётся ведение статистики пользователей. А именно занесение информации о пользователях, посетивших твой сайт в таблицу acess_log базы данных visitors на сервере mysqlhost. Сервер apache носит имя localhost. Занеся SetENV visitors@mysqlhost для создания новой переменной окружения в httpd.conf я понял, что по какой то причине переменная не создаётся. Посему слегка модифицировал код своего модуля LogConnect.pm до такого состояния:
Цитата:

package LogConnect
use DBI;
use strict;
sub connect {
my $log_dsn = "DBI:mysql:database=visitors;host=mysqlhost";
my $log_dbh = DBI->connect($log_dsn, "root", "123456");
if (!defined($log_dbh)) {
print "\nerror: \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a \u0434\u0430\u043d\u043d\u044b\u0445 MySQL:\n";
print DBI->errstr;
print "-" x 25 "\n';
return;
}
}
1;
---
Далее, я написал два скрипта, первый (vislog.cgi) для ведения статистики, а второй (viewlog.cgi) для её отображения. Вот их код:
Цитата:

#!/usr/local/bin/perl5 -wT
#vislog.cgi
use strict;
use POSIX;
use Socket;
use lib qw(.);
use LogConnect;

my $dbh = LogConnect->connect;
my $ip = $ENV{'REMOTE_ADDR'};
my $browser = $ENV{'HTTP_USER_AGENT'};
my $refer = $ENV{'HTTP_REFERER'};
my $here = $ENV{'REQUEST_URI'};

my @digits = split(/\./, $ip);
my $adress = pack("C4", @digits);
my $host = gethostbyaddr($address, AF_INET);

my $time = strftime("%Y-%m-%d %H:%M:%S",gmtime);

my $query = qq(
insert into acess_log values
('$ip','$host','$browser','$here','$referer','$time'));
my $sth = $dbh->prepare($query);
$sth->execute;
$dbh->disconnect;
Цитата:

#!/usr/local/bin/perl5 -wT
#viewlog.cgi
use strict;
use lib qw(.);
use LogConnect;

print "Content-Type: text/html\n\n";

my $dbh = LogConnect->connect;
my $query = qq(select CLIENT from acess_log);
my $sth = $dbh->prepare($query);
$sth->execute;
my %clients;
while (x$_ = $sth->fetchrow) {
$clients{$_}++;
}
$dbh->disconnect;
my @clients = sort {$clients{$b} <=> $clients{$a}};
keys %clients;
print <<HTML;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=KOI8-R">
<title>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u0442\u0447\u0451\u0442</title>
</head>
<body bgcolor="white">
<center><h2>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u0442\u0447\u0451\u0442</h2></center>
<center><h3>\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 Web-\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432</h3></center>
<hr noshade>
<center>
<table border=1 cellpadding=3 cellspacing=3>
HTML
foreach (@clients) {
print qq(<td align=center>$_</td><td align=center>
$clients{$_}</td><tr>);
}
print <<HTML;
</table>
</center>
</body>
</html>
HTML
---
Однако при запуске любого из этих скриптов выдаётся сообщение:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, santaxp@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Apache/1.3.20 Server at localhost Port 80

SantaXP 27-06-2005 16:59 336421

Так, я залез в логи и нашёл ошибку в синтаксисе. Немного подредактировал LogConnect.pm и теперь он выглядит так:
Цитата:

package LogConnect;
use DBI;
use strict;
use CGI::Carp qw(fatalsToBrowser);
sub connect {
my $log_dsn = "DBI:mysql:database=visitors;host=localhost";
my $log_dbh = DBI->connect($log_dsn, "root", "123456");
if (!defined($log_dbh)) {
print "Content-Type: text/html\n\n";
print qq(
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=KOI8-R">
<title>Ошибка!</title>
</head>
<body bgcolor="white">);
print "<p><font color='red'>error: Проблема с подключением к данных MySQL:</font></p>";
print "<p><font color='blue'>";
print DBI->errstr;
print "</font></p>";
print "-" x.25."\n";
return;
}
}
1;
Потом он выдал мне ошибку из vislog.cgi, что, мол:
Цитата:

Global symbol "$address" requires explicit package name at /usr/local/apache/cgi-bin/system/vislog.cgi line 27.
Execution of /usr/local/apache/cgi-bin/system/vislog.cgi aborted due to compilation errors.
Хм... Вот здесь мне и нужна ваша помощь. Ибо когда я пишу:
my $host = gethostbyaddr(my $address, AF_INET);
Он больше не жалуется по этому поводу, однако я не уверен, что так писать правильно...
Далее, он пожаловался, что нет модуля mysql.pm Посему я через CPAN установил его. Были проблемы с исходниками и их пришлось немного подправить, правда пока всё работает, слава богу.
Далее я опять запускаю vislog.cgi и вот, что он мне выдаёт:
Цитата:

error: Проблема с подключением к данных MySQL:

Unknown database 'visitors'
Content-type: text/html
Software error:

Can't call method "prepare" on an undefined value at /usr/local/apache/cgi-bin/system/vislog.cgi line 34.

For help, please send mail to the webmaster (santaxp@localhost), giving this error message and the time and date of the error.
(Раньше у меня была база данных visitors, однако когда переустонавливал во FreeBSD MySQL свсё стёр.)
И это ещё не всё! :( После mysql стала глючить, ибо он якобы не видел созданный мною mysqlhost и пришлось в LogConnect заменить это на localhost. Однако теперь при попытке в mysqlcc создать новый MySQL Server, скажем, localhost он пишет мне вот это:
Цитата:

[localhost] ERROR 1250: Client does not support authentication protocol requested by server; consider
upgrading MySQL client
----
Ужас! Что мне со всем этим делать???

mar 27-06-2005 18:51 336441

SantaXP
версия mysql? у них с переходом на 4.1 были некоторые довольно существенные изменения. Посмотрите тему "MySQL4.0->MySQL4.1 проблемы миграции". В частности:
Цитата:

(4.1)... использует несколько другой протокол авторизации, несовместимый с PHP 4.3.10. Служебные таблицы, хранящие пароли пользователей, изменили свой формат.

SantaXP 27-06-2005 22:32 336473

Версия 5.0.0_2.
Однако ничего похожего в теме не нашёл. Блин, мне бы расшифровать данную фигню, которую мне пишет MySQL, точнее mysqlcc, а то очень надо. :(

SantaXP 27-06-2005 23:32 336494

Опытным путём, я выяснил, что MySQL отказывается принимать пользователся root, как верховного (если можно так сказать :) ), но зато прекрасно даёт доступ ко всему пользователю mysql. Однако, при попытке подключения к серверу, если установить пароль на него командой: mysqladmin -u root password 123456 (скажем, такой простой и идеальный в домашних условиях пароль :) ) MySQL выдаёт сообщение:
----
[localhost] ERROR 1250: Client does not support authentication protocol requested by server; consider
upgrading MySQL client
----
Посему, без пароля всё работает чётко, однако каким образом этого избежать не ясно. Даже, если не учитывать данную "мелкую" придирчивость MySQL к паролям (может даже всвязи с неопытностью по отношению к ней) так, без пароля, можно жить и дальше.
Но вопрос:
----
Software error:

Can't call method "prepare" without a package or object reference at /usr/local/apache/cgi-bin/system/vislog.cgi line 34.

For help, please send mail to the webmaster (santaxp@localhost), giving this error message and the time and date of the error.
----
Остаётся неразрешённым... :( Ещё раз спасибо всем за внимание и терпение...

archy 29-06-2005 15:42 336973

Сказано же, обновите mysql клиент, потому как не поддерживается данный протокол аутентификации

SantaXP 30-06-2005 20:48 337314

Хе... У меня пятая версия - куда выше???
----
Хех... Со скриптом я разобрался, правда с трудом, однако проблема с MySQL осталась. В чём собака зарыта - не понятно. В любом случае - спасибо за внимание...

archy 01-07-2005 10:45 337450

Клиентская либа, которая используется в perl точно 5 версии?

SantaXP 01-07-2005 22:09 337649

archy
Э... В смысле моуль mysql.pm??? Я его через cpan на комп инсталил... Были проблемы с сырцами и пришлось их немного подредактировать...

archy 03-07-2005 13:03 338017

SantaXP
Вообщем разберись сначала с верчиями своих либ, потом будем смотреть, что к чему...
сколько раз можно говорить, что во фре для установки программ есть порты!? Установи все оттуда и не будет таких вопросов, а хочется геморроя, разгребай его сам и не пудри людям мозги. (ничего личного, просто надоело уже...)


SantaXP 03-07-2005 20:04 338062

archy
Блин, mysql.pm работает!!! Как модуль к PERL ставить через порты???? Для этого есть cpan!!!

archy 04-07-2005 14:50 338279

Предлагаю закрыть тему, пока SantaXP не установить все из портов

SantaXP 06-07-2005 21:15 338969

archy
Блин, ну чё ты упёрся, как баран на новые ворота? Этот модуль прекрасно работает, а вот MySQL нет - и именно MySQL я устанавливал из ПАКЕТОВ!!! ;)
----
Если брать модуль mysql.pm из пакетов, то он лишь под 3-ю версию MySQL, ибо требует её наличие, которая, в свю очередь конфликтует с 5-й версией (которая у меня стоит)! А из cpan (из которого инсталят ВСЕ нормальные PERL программисты) у меня всё прекрасно работает и запускается, причём метод, что в портах, что в cpan один и тот же! Сначала ищет последнюю версию модуля на сервере, копирует на комп и далее устанавливает make -> make install. ;)

archy 16-07-2005 15:14 341456

SantaXP
Вобщем слушай, как баран я тебе разжую эту траву, перед тем как устанавливать что либо нужно прочитать об этом... начиная с mysql4 поменялась система аутентификации, посему шлифуем сюда и внимательно читаем.
Там сказано, чтобы использовать мускуль4 со старыми клиентами нужно юзать ключик --old-passwords для mysqld и только после этого задавать пароли.


Время: 17:19.

Время: 17:19.
© OSzone.net 2001-