| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Ошибка CGI |
| Автор: kentochek 25.5.2007, 13:00 |
| При запуске на хостинге своего скрипта, возникает такая ошибка CGI Error The specified CGI application misbehaved by not returning a complete set of HTTP headers. В чем может быть проблема, помогите плиз... P.S. на локальной машине все нормально работает |
| Автор: nitr 25.5.2007, 14:27 |
| kentochek, покажите кусок скрипта с передачей заголовка... или так сказать - начало самого скрипта |
| Автор: kentochek 25.5.2007, 14:35 | ||
#! perl -wT use strict; use lib qw(.); use CGI qw(:all); use CGI::Carp qw(fatalsToBrowser); $|=1; my %Form; my @pairs=split(/&/,$ENV{'QUERY_STRING'}); my @NewPairs; foreach (@pairs){ my($name,$value)=split(/=/,$_); push(@NewPairs,$name); push(@NewPairs,$value); $value=~tr/+/ /; $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $Form{$name}=$value; } print "Content-type: text/html\n\n"; ... Далее пошли различные обработки... |
| Автор: Nab 25.5.2007, 15:00 | ||
| kentochek, из какой древней книжки вы берете свои рецепты? все что Вы тут привели, дублируется два раза... Достаточно вот этого:
вместо своих $Form{Имя параметра} теперь можно использовать $q->param(Имя параметра) Но даже с Вашим кодом не должно вызывать ошибку.... Приводите скрипт полностью... |
| Автор: kentochek 25.5.2007, 15:10 |
| #! perl -wT use strict; use lib qw(.); use CGI qw(:all); use CGI::Carp qw(fatalsToBrowser); #####Подключаем модули которые выводят разметку страницы use Main; #####выводим текст на главной странице use MainPage_Top; #####заголовок страницы и меню use MainPage_Bottom; #####низ страницы и закрывающие теги $|=1; my %Form; my @pairs=split(/&/,$ENV{'QUERY_STRING'}); my @NewPairs; foreach (@pairs){ my($name,$value)=split(/=/,$_); push(@NewPairs,$name); push(@NewPairs,$value); $value=~tr/+/ /; $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $Form{$name}=$value; } print "Content-type: text/html\n\n"; if(($NewPairs[1] eq 'Main') or (!param())) { MainPage_Top->Top; Main->Main_Page; MainPage_Bottom->Bottom; print qq(</tr></table></body></html>); } Тело модулей (к примеру Main.pm) package Main; use strict; sub Main_Page{ print <<HTML; <tr> <td align="center"><font class=c_name_header>Text_0</font></td> </tr> <tr> <td height="100%" class="body_txt" style="padding-left:5"> <font size=2 style="padding-left:35">Text_2<br><br></font> <font style="padding-left:35" size=2>Text_1<br></font> <br></td> </tr> HTML } 1; В остальных модулях, вывод производится аналогично, т.е. там выводится разметка самой HTML страницы... |
| Автор: Nab 25.5.2007, 17:05 | ||
| Аааааааа, понял наверно потому что на локальной машине у вас винда а заливаете наверно на нормальный линукс.... поставьте вместо ваших абсолютно некорректных '#! perl -wT' нормальную строку
Первая строка файла и БЕЗ пробелов!!!! А вообщеб разбирать ваш код не пожелаю никому... :( так уже давно не пишут... хотя если вы учитесь то норм |
| Автор: kentochek 25.5.2007, 20:31 | ||
Да, учусь пока А как щас принято писать? |
| Автор: Nab 26.5.2007, 00:28 |
| Так заработало, или нет? ну тут вопрос сложный Если вы генерите весь вывод скриптом, то можно заюзать соответствующие функции CGI.pm, или аналогичного... почитайте документацию по нему... была гдето даже на русском... поищите в прикрепленных топиках на форуме... Но наверно набирающий сейчас обороты, это способ когда данные отдельно, представление отдельно и оформление тоже отдельно То есть использование какой либо системы шаблонов для генерации кода и CSS для последующего его приведения к необходимому виду... Для начала я рекомендую поглядеть на HTML::Template, как простой, но в тоже время вполне достаточный для большинства задач. Хотя альтернатив предостаточно, это и более мощная, даже слишком как по мне, TemplateToolkit, и мало мне знакомый Petal, и еще несколько, да и свою написать не так сложно... Когда-то в бытнось мою чайником я тоже простенькую писал |
| Автор: djkostya 27.5.2007, 22:54 | ||
| По ходу А что означает
????????????????? |
| Автор: Nab 27.5.2007, 23:06 | ||
Отключает буферизацию для текущего STDOUT.... То есть вывод строки, на экран к примеру, произойдет сразу после символа перевода строки, или окончания текста, а не после заполнения буфера терминала.... По моим наблюдениям около 4 килобайт. |