2014-10-24 3 views
0

Я хотел бы знать, как отлаживать сценарий cgi, который не выводит HTML.Отладка сценария CGI, который не печатает HTML

В настоящее время у меня есть страница входа в систему с формой html, которая при передаче перенаправляет другой скрипт cgi. Этот скрипт должен проверить, правильно ли введен пользователь.

Этот сценарий не распечатывает html, поэтому я не уверен, как я должен его проверять. В настоящее время я получаю Internal Server Error, когда перенаправление происходит с этим скриптом. В error.log состоянии:

End of script output before headers: 

Может кто-то пожалуйста, скажите мне, как я могу отладить этот скрипт?

Благодарим за помощь.

main.cgi

#!/usr/bin/perl -w 

use CGI qw/:all/; 
use CGI::Carp qw(fatalsToBrowser warningsToBrowser); 
use CGI::Cookie; 
use Data::Dumper; 
use List::Util qw/min max/; 
warningsToBrowser(1); 

# print start of HTML ASAP to assist debugging if there is an error in the script 
print page_header(); 

# Get Cookies 
%cookies = CGI::Cookie->fetch; 

# If no cookie, display login page 
if (!%cookies){ 
    # Redirects the user to login.cgi 
    print show_login_form(); 
} 

#if cookie 
# do something 

print page_trailer(); 

login.cgi

use CGI qw/:all/; 
use CGI::Carp qw(fatalsToBrowser warningsToBrowser); 
use CGI::Cookie; 
use Data::Dumper; 
use List::Util qw/min max/; 
warningsToBrowser(1); 

$cookie_value = ""; 



# Convert request method to Uppercase eg: GET, POST 
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; 

# If "POST" request sent, check login credentials 
if ("$ENV{'REQUEST_METHOD'}" eq "POST"){ 
    # Get login parameters 
    $username = param('username'); 
    $password = param('password'); 

    $loginCheckResult = check_login($username, $password); 

    # If login was successful, create a cookie 
    if ($loginCheckResult){ 
     # Set Cookie 
     $cookie = CGI::Cookie->new(-name=>$cookie_value,-value=>$cookie_value);  


    # If login was Unsuccessful, redisplay the login page 
    } else { 
    # Do something here... 
    } 
} 
+0

Пожалуйста, ваш скрипт. Знаете ли вы, что вы можете писать сообщения журнала, чтобы помочь отладить сценарий? –

+0

@ialarmedalien Спасибо за ваш ответ. Нет, я этого не знал. –

+0

Измените свои скрипты на 'use strict; используйте предупреждения, поэтому вы получите сообщения об ошибках с Perl. –

ответ

0

Ошибка End of script output before headers: означает, что ваш скрипт закончил без вывода чего-либо. По сути, вы создали CGI::Cookie но не sent it to the browser:

$cookie->bake; 

Если вы хотите установить кук, а затем перенаправляют на другую страницу, вы можете использовать:

print redirect(-uri => 'other_page.html', -cookie => $cookie); 
+0

Спасибо RobEarl. Я исправил это. Я заметил, что мне не нужно добавлять '$ cookie-> bake'. Кажется, это не сработало, когда я добавил эту строку. Я также читал следующее: 'Функция redirect() перенаправляет браузер на другой URL-адрес. Если вы используете перенаправление, подобное этому, вы также не должны печатать заголовок .' (источник: http://www.perlmonks.org/?node_id=695252) –

Смежные вопросы