| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Нужна помощь по ошибке 500 (perl) |
| Автор: kocmocivan 16.9.2009, 17:04 |
| Всем здравствуйте, очень нужна ваша помощь! ПРоблема в следующем. ПРи заходе в админку на сайте компании после ввода логина и паса или даже просто входе без ввода чего-либо идет ошибка: Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, devnull@hosting.ru 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.37 Server at www.decotec.ru Port 80 Файл логов пишет следующее: ## failed to open log file fopen: Permission denied [Wed Sep 16 17:08:20 2009] [error] [client 213.147.49.50] Premature end of script headers: /www/docs/wwwdecotec/cgi-bin/admin/login/index.pl failed to open log file fopen: Permission denied [Wed Sep 16 17:08:22 2009] [error] [client 213.147.49.50] Premature end of script headers: /www/docs/wwwdecotec/cgi-bin/admin/login/index.pl [Wed Sep 16 17:08:22 2009] [error] [client 213.147.49.50] File does not exist: /www/docs/wwwdecotec/www/favicon.ico [Wed Sep 16 17:08:27 2009] [error] [client 213.147.49.50] File does not exist: /www/docs/wwwdecotec/www/favicon.ico ## Основной файл - index.pl который собственно и отвечает за вход в админку после ввода логина и паса. Его код - #!/usr/bin/perl use lib "../../lib"; use SysFunc; use Templates; use DBI; use data; my $globals=&SysFunc::get_globals(); %data=&data::get(); if(&SysFunc::login($data{login},$data{passwd})) { print qq~<script language=javascript>location.href="../cgi-bin/admin/index.pl";</script>~; } else { print "Content-type: text/html;charset=windows-1251\n\n"; $data=Templates::add_translate($data,"error","<font color=red>оЕРТБЧЙМШОЩК МПЗЙО ЙМЙ РБТПМШ</font>"); Templates::show_page("../../../admin.html",$data); } if($data{action} eq "logout") { &SysFunc::logout(); print qq~<script language=javascript>location.href="/decotec/";</script>~; # return 1; } &SysFunc::add_globals; exit(0); ПРоверил все что мог найти в инете по решению данной проблемы: 1)код ,вроде, правильный (заголовки ответов правильные). 2)права стоят 755 на файле и на папках. Еще прочитал что за данную ошибку так же отвечает .htaccess, вот его код: DirectoryIndex index.pl Options +ExecCGI RewriteEngine Off Есть еще одно соображение, может ли быть такое, что в данном файле идет бывшее сохранение с UTf-8 с BOM и из-за этого не работает. Т.к. раньше до меня код изменял мой ген. дир. с использованием WOrdPad я сейчас работаю с NotePad plus plus. Но он не находит никаких дополнительных кодеровок и доп прописей. print "Content-type: text/html;charset=windows-1251\n\n"; Заменял на print "Content-type: text/html;charset=windows-1251\r\n\r\n"; - тоже не помогает (как прочел где-то в инете)... Большая просьба еще помогающим, пишите "доступным языком" т.к. глубоких технических выражений я еще не знаю |
| Автор: kavkaz 16.9.2009, 17:38 | ||
переводы строк. особенно после
|
| Автор: kocmocivan 16.9.2009, 19:26 |
| переводы строк. особенно после - Это что значит? ПО поводу компеляции всего скрипта - я не знаю почти perl т.к. только начинаю, а сайт оказался как назло именно на perl и что там что обозначает я честно говоря не знаю... |
| Автор: kavkaz 17.9.2009, 11:54 | ||
from google:
|
| Автор: kocmocivan 17.9.2009, 13:12 |
| Самый простой способ решить данную проблему - это перезакачать все Perl-скрипты в ASCII режиме. - СДЕЛАЛ не помогло! |
| Автор: kavkaz 17.9.2009, 16:33 |
| К сожалению под рукой нет у меня компа с Windows ... там где то в настройках есть галочка, проявите любознательность по поводу ssh предлагаю погуглить... например это почитать http://ru.wikipedia.org/wiki/SSH клиент для ssh под windows вам нужен PuTTY данный для авторизации на ваш сервер с сайтом спрашивайте у администратора |
| Автор: sir_nuf_nuf 17.9.2009, 16:36 | ||
пишите больше знаков вопроса, мы не понимаем что вы спрашиваете!!!!!!!!!
FTP + F5 ? если хостер разрешает FTP. SSH - защищенное соединение с удаленным сервером (unix) Для вас это выглядит примерно так: вы вводите пароль и получаете доступ к командной строке вашего сервера. дальше делаете что хотите, точне на что хватит прав. |
| Автор: kocmocivan 17.9.2009, 16:40 |
| Самый простой способ решить данную проблему - это перезакачать все Perl-скрипты в ASCII режиме. - СДЕЛАЛ через CUteFTP не помогло! |
| Автор: sir_nuf_nuf 17.9.2009, 17:19 | ||||||
А еще меня смущает этот момент:
1) Если на страничке выводится javascript , то заголовки писать уже не надо что - ли ? Это ошибка Заголовки должны быть всегда.
2) Это очень извращенный способ делать редирект. Лучше так:
|
| Автор: kocmocivan 17.9.2009, 19:06 |
| sir_nuf_nuf ПО поводу загаловкой согласен - т.к. сама ошибка 500 идет именно из-за того что не заканчивается воспроизведение заголовка полностью... - это как я понял из разных источников. НО ГДЕ ЭТО ОКОНЧАНИЕ НЕ ПРАВИЛЬНОЕ? или где прерывание начинается... после чегооо??? А вот по поводу - print "Content-type: text/html;charset=windows-1251\n\n"; Он должен писаться именно так или хотя бы присутствовать в скрипте элемент - Content-type: text/html Без него вывод заголовков и элементов ХТМЛ бесполезен и не работает, опять же как я понял... |
| Автор: sir_nuf_nuf 18.9.2009, 01:52 | ||||
| Во первых, дабы рассеить ваши сомнения: perl у пофиг на переносы строк. Он нормально разбирает и виндовый вариант ("\r\n") и unix ("\n") Ошибка НЕ в этом. у вас скрипт не большой - можно просто перебрать все варианты. Расставьте отладочную печать - поймете как скрипт работает.
Поймите, вы выводите не HTML, вы выводите ответ HTTP целиком (заголовки + контент) По стандарту HTTP конент должен быть отделен от заголовков пустой строкой. поэтому "\n\n" - необходимо. |
| Автор: kocmocivan 18.9.2009, 09:40 |
| Прогнал скрипт через DzSoft Perl Editor - он пишет следующее - что ошибка при инициализации use SysFunc.pm ... |
| Автор: Bulat 18.9.2009, 10:04 |
| kocmocivan, если есть доступ на сервер выполни команду perl -c /www/docs/wwwdecotec/cgi-bin/admin/login/index.pl - компиляция и выложи что будет в ответе.. я думаю этого будет достаточно для исправления ошибки.. Добавлено через 2 минуты и 54 секунды можно и на винде, через cmd... Пуск -> выполнить -> cmd(ОК)... ту же самую команду, только путь относительно того, где у тебя скрипт. |
| Автор: kocmocivan 18.9.2009, 10:26 |
| perl -c /www/docs/wwwdecotec/cgi-bin/admin/login/index.pl perl -c /cgi-bin/admin/login/index.pl perl -c ../cgi-bin/admin/login/index.pl COMMAND NOT UNDETSTOOD - короче не понимает он комунду... ВВел в Total COmandor |
| Автор: sir_nuf_nuf 18.9.2009, 10:56 | ||
| в windows разделители каталогов - дргуие. Пишите что то типа
|
| Автор: Bulat 18.9.2009, 15:48 |
Еще бы. Если чего-то не понятно, не получается сделать именно так как я написал - спроси конретно.. Но если ты будешь делать то, что я пишу чуть по-своему - ес-но вряд ли это даст результаты. А компиляция - первое дело, если скрипт не отрабатывает. P.S. если уж и работать со скриптовыми языками в винде, то хотя бы под FAR. |