• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Dkid

Perl e CGI

8 mensagens neste tópico

Boas,

Hoje em vez de ter estado a ler o livro, decidi fazer algo que já me andava aqui a roer. Que era páginas web com perl.

Para tal precisamos de:

CGI - Common Gateway Interface, que permite realizar páginas dinâmicas, ou seja permite o browser passar informação para o servidor web. Para mais informações : http://pt.wikipedia.org/wiki/CGI ou mais detalhadamente : http://en.wikipedia.org/wiki/Common_Gateway_Interface

Como o código precisa de ser interpretado (do lado do servidor), iremos necessitar de um servidor web:

- Apache (bastante utilizado e com bastante documentação)

- Lighttpd (dizem ser mais leve, e é o que estou a utilizar)

E por fim, para o servidor web necessitamos do mod_perl : http://perl.apache.org/ ou http://redmine.lighttpd.net/projects/1/wiki/ApplicationsUsingLighttpd

Após termos tudo bem instalado(se estiverem em ambiente linux, será mais fácil de seguirem os passos descritos, mas é apenas a minha opinião). Se estiverem a usar Windows, procurem pois não sei como vos ajudar.

Desloquem-se à vossa pasta, em linux normalmente é /var/www/, e criem um novo ficheiro com o editor de texto e escrevam:

#!/usr/bin/perl

print"Bom Dia!";

Guardem com a extensão .cgi (embora não estejamos a utilizar o cgi ainda)

Existem outras extensões como .pm que quer dizer "perl module", e deveria ser mais utilizado para programação orientada a objectos.

Neste caso vamos guardar como exemplo.cgi

Vão ao vosso browser e escrevam : http://localhost/exemplo.cgi

Se virem o resultado : Bom dia!, então está tudo a funcionar devidamente.

Podemos então passar para o próximo passo, vamos realizar um formulário onde o utilizador vai colocar o seu nome e o seu sobrenome.

#!/usr/bin/perl

print<<END;	# Depois desta linha podemos colocar todo o código HTML sem ter de o adaptar para ser compilado até chegar à palavra END (no final)
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<head>
<title>Bom dia!</title>
</head>
<h1>Bom dia!</h1>
<hr>
<FORM action="formulario.cgi" method="POST">
<table align="center" width="30%">
<tr>
<td>
Nome: <td><input type="text" name="nome"></td>
</td>
</tr>
<tr>
<td>
Sobrenome: <td><input type="text" name="sobrenome"></td>
</tr><tr align="right"><td></td><td>
<input type="submit" value="Enviar!">
</td><tr></table>
</FORM>

END
    local ($buffer, @pairs, $pair, $name, $value, %FORM); #também não entendi bem esta linha

    $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; 		#vai receber a informação do formulário
    if ($ENV{'REQUEST_METHOD'} eq "POST")  		# se o método de envio for POST
    {
        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});	#vai ler a entrada, através do buffer
    }else {
$buffer = $ENV{'QUERY_STRING'};			#se for utilizado do método GET usa-se QUERY_STRING
    }
    # Split information into name/value pairs
    @pairs = split(/&/, $buffer);			#Separa a informação em pares de nome/valor
    foreach $pair (@pairs)				#para cada par
    {
($name, $value) = split(/=/, $pair);		#Separa-se os dois elementos pelo sinal de igual "="
$value =~ tr/+/ /;				#não entendi esta linha, mas entendi que se as retirar irá aparecer o simbolo + no lugar do campo nome ou sobrenome
#$value =~ s/%(..)/pack("C", hex($1))/eg;	#também não entendi esta
$FORM{$name} = $value;
    }
    $nome = $FORM{nome};				#É o nome do formulário
    $sobrenome  = $FORM{sobrenome};			#É o sobrenome do formulário

if ($nome eq '' && $sobrenome eq '')			#se ambos os campos estiverem por preencher envia uma mensagem
{print "Preencha os campos!\n";}
elsif ($nome eq '') 					#se o campo nome estiver vazio (a variavel vai estar vazia)
{print "Preencha o campo nome!\n";} 			#Envia uma mensagem para preencher o campo nome
elsif($sobrenome eq '')
{print "Preencha o campo sobrenome!\n";} 		#o mesmo que o campo nome

else{							#se estiverem ambos preenchidos envia o html
print "<html>";
print "<body>";
print "<h2>Hello $nome $sobrenome - Second CGI Program</h2>";
print "</body>";
print "</html>"; }

#fonte : http://www.tutorialspoint.com/perl/perl_cgi.htm
#	 http://www.jmarshall.com/easy/cgi/portuguese/
#	 http://www.cgi101.com/book/
# 	 http://www.tutorialspoint.com/perl/perl_cgi.htm

Como podem ver ainda existem coisas que nem mesmo eu entendo, mas a minha intenção é partilhar e aprender também.

Acabei depois por descobrir uma outra maneira de poupar linhas de código, com html já pré-feito

#!/usr/bin/perl -w

use strict;

use CGI qw(:standard);				# Vai permitir reduzir o codigo html, pois já vem com os standards do html e funções da CGI
use CGI::Carp qw(fatalsToBrowser);      	# Vai enviar as mensagens de erro para o browser

# Content-type, titulo da página, heading
print header(), start_html("Hello!"), h1("Bom dia!"), hr; #vai realizar o html por nós com charset utf-8

if (param())	{				# Se for verdade, então o formulário já foi preenchido

my $nome  = param("nome");   		# Extrai o valor que vem do formulário
print p("O seu nome é $nome"), p("O seu ip é $ENV{'REMOTE_ADDR'}");	# Mostra-nos o Nome inserido e o ip
}
else	{  					# Else, first time through so present form.
					# Se não existe preenchimento, então vamos mostrar o formulário

print start_form();			#inicia o formulário
print p("what is your name? ", textfield("nome")); #paragrafo, e campo de texto
print p(submit("Submeter"), reset("Limpar"));	   #paragrafo, botao submit, botao reset
print end_form();			#termina o formulário
}

print end_html;					#termina o html

#Com mais prática conseguimos poupar imensas linhas de código deixando assim o código mais limpo

#fonte: http://www.cgi101.com/learn/ch1/text.html
#	http://info.eps.surrey.ac.uk/FAQ/cgitutor/cgi3.html

Tentei fazer o meu melhor para documentar tudo o que entendi e sabia, as fontes consultadas estão em ambos os códigos, espero que vos sirva!

PS: Estive para colocar este tópico na secção de Web, mas como a linguagem Perl sempre foi debatida neste espaço, obtei por escrever aqui.

Cumprimentos e boas aprendizagens,

Dkid

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como o código precisa de ser interpretado (do lado do servidor), iremos necessitar de um servidor web:

- Apache (bastante utilizado e com bastante documentação)

- Lighttpd (dizem ser mais leve, e é o que estou a utilizar)

E por fim, para o servidor web necessitamos do mod_perl : http://perl.apache.org/ ou http://redmine.lighttpd.net/projects/1/wiki/ApplicationsUsingLighttpd

Estás a confundir coisas.

Para CGI, o Apache usa o mod_cgi. O mod_perl é um modelo diferente não é CGI, embora possas usar os módulos de Perl para CGI no mod_perl.

O mod_perl é bem mais moderno e eficiente e permite uma integração muito superior com o Apache.

http://en.wikipedia.org/wiki/Mod_perl

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Baderous, obrigado pela informação já vou estudar isso!

Falco desconhecia o mod_cgi, pensei mesmo que era necessário o mod_perl, obrigado pela informação

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Neste momento "ninguém" desenvolve em Perl para web com CGI, a não ser que não se use Apache, usa-se Apache + mod_perl...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Neste momento "ninguém" desenvolve em Perl para web com CGI, a não ser que não se use Apache, usa-se Apache + mod_perl...

Fiquei um pouco perdido agora, podes esclarecer-me com algum exemplo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cansaço!

Já entendi o que querias dizer, com o mod_perl o que acontece é que em vez de usar-mos CGI vamos utilizar apenas código em perl sem precisar de recorrer à CGI.

Realmente não me tinha apercebido embora já tivesse realizado um código em perl e tenha corrido no servidor web.

Isto ajudou-me a entender o que querias dizer http://www.perl.com/pub/a/2002/02/26/whatismodperl.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora