A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Linguagem Perl - Acessando a CGI

Sab

22

Nov

2008


13:55

(1 voto de 5.00) 


A linguagem Perl possui diretivas típicas de CGI, próprias para lidar com dados de formulários, acionar serviços do servidor como e-mail, páginas HTML, etc. Neste tutorial será mostrado como a Perl se comunica com a interface CGI para acionar estes serviços.

Obter dados de formulários

Através de código Perl pode-se obter dados de um formulário HTML através da CGI. O exemplo abaixo não é um programa completo, é apenas um módulo que pode ser inserido num script.

if($ENV{'REQUEST_METHOD'} eq 'GET') { $Dados = $ENV{'QUERY_STRING'} } else { read(STDIN, $Dados, $ENV{'CONTENT_LENGTH'}); } @CamposForm = split(/&/, $Dados); foreach $Campo (@CamposForm) { ($nome, $valor) = split(/=/, $Campo); $valor =~ tr/+/ /; $valor =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $valor =~ s///g; $Form[$i] = $nome; $i = $i + 1; $Form[$i] = $valor; $i = $i + 1; }

Este código Perl inicialmente testa se o formulário HTML usou o método GET ou o método POST e, dependendo do resultado, busca os dados. Portanto, independentemente do método utilizado pelo formulário, este código obtém os dados enviados.

Os dados são colocados na escalar $Dados. O valor de $Dados tem a aparência do fluxo de dados típica de uma transferência de dados de formulários.

Com a diretiva @CamposForm = split(/&/, $Dados);, a cadeia de caracteres $Dados é transformada numa lista. O caractere delimitador, aquele que separa os elementos do fluxo de dados, é o "e comercial" (&). Os campos do fluxo de dados do formulário são separados em campos únicos através deste caracter delimitador.

Logo a seguir, cada um dos campos da nova lista @CamposForm é tratado dentro de um loop foreach. Primeiro, cada campo é separado em dois componentes indicando-se como delimitador o sinal de igual =. Os dois componentes são atribuídos às escalares $nome e $valor. A escalar $nome recebe o mesmo valor definido na declaração name= do formulário HTML correspondente. A escalar $valor recebe o conteúdo digitado ou escolhido pelo usuário que preencheu o formulário. Supondo-se que o formulário HTML contenha um campo de entrada de dados que tenha sido definido com <input name="Apelido" size="60" maxlength="60"> e que o usuário tenha digitado "Cuca Fresca", então, para este campo do formulário, a escalar $nome terá o valor "Apelido" e a escalar $valor será igual a "Cuca Fresca".

Com os procedimentos de procura e substituição seguintes, ainda dentro da alça foreach, são retirados todos os caracteres poluidores que tenham sobrado no fluxo de dados do formulário.

Os dados do formulário, por fim, são atribuídos à lista @Form. Os elementos pares desta lista, ou seja, $Form[0], $Form[2], $Form[4], etc, contém os nomes dos campos. Os elementos ímpares, $Form[1], $Form[3]... contém os valores dos campos.

info Observação: Os códigos Perl aqui apresentados são muito simples. Têm como principal tarefa esclarecer os princípios do processamento. Se você necessita de soluções mais profissionais, terá de programá-las ou então procurar scripts freeware prontos.

Enviar dados de formulário por email

Os dados de formulários preenchidos podem, por exemplo, ser gravados num arquivo do servidor. A maioria, porém, prefere receber imediatamente os dados do formulário preenchido por um usuário via e-mail.

O código Perl a seguir é a continuação do script anterior.

$ProgramaMail = "/usr/lib/sendmail"; $MailAssunto = "Feedback de Formulário"; $Destinatario = "SeuNome\@Provedor\.xxx"; $NomeRemetente = $Form[1]; $MailRemetente = $Form[3]; open (MAIL,"|$ProgramaMail -t") || die; print MAIL "To: $Destinatario\n"; print MAIL "From: $Mailremetente $NomeRemetente\n"; print MAIL "Subject: $MailAssunto\n\n"; $i = 0; $max = $#Form; for($i=0;$i<=$max;$i=$i+2) { print MAIL "$Form[$i]: $Form[$i+1]\n"; } close(MAIL);

Este código Perl começa definindo algumas escalares. A primeira e a mais importante escalar é $ProgramaMail. Aqui é preciso indicar qual e onde o programa gerenciador de e-mails se encontra no servidor. O programa padrão é o sendmail, presente em quase todos os servidores da Internet - uma indicação típica para servidores Unix/Linux é /usr/lib/sendmail. Informe-se com o seu provedor de serviços e confirme o nome e a localização do gerenciador de e-mails colocado à sua disposição. Lembre-se, se esta diretiva não estiver absolutamente correta, o envio de e-mails não será possível.

A escalar $MailAssunto recebe o que deve constar no subj (subject) do cabeçalho do e-mail. A escalar $Destinatario deve conter o endereço para o qual o e-mail deve ser enviado.

As duas escalares $NomeRemetente e $MailRemetente foram incluídas no código apenas para completar o exemplo. Estas escalares recebem seu conteúdo do formulário. Aliás, isto só funciona se o formulário requisitante tiver campos para o nome e para o endereço de e-mail do usuário. Neste caso, é necessário indicar em $Form[#] o número correto dos elementos que correspondem a estes campos.

Após tratar as escalares, o código abre o programa gerenciador de e-mails do servidor. A opção -t na função open se refere ao programa sendmail. Caso o gerenciador seja outro, informe-se sobre a forma correta de acioná-lo para enviar e-mails.

Se o programa gerenciador não puder ser aberto, o script é interrompido com die, sem nenhum comentário. Neste ponto você pode, se quiser, adicionar uma mensagem de erro personalizada.

Através do comando print, o script escreve os dados conhecidos no cabeçalho do e-mail. Todos os e-mails da Internet têm um formato único. No cabeçalho constam diversas informações. Algumas delas são acrescentadas apenas no decorrer da viagem para o destinatário.

Dentro do loop for são escritos os diversos campos e seus respectivos valores. Os nomes dos campos e o conteúdo dos campos são separados por dois pontos.

Enviar código HTML ao navegador

Uma das tarefas mais importantes de scripts CGI é enviar código HTML ao navegador solicitante. Gerando este código através de um script pode-se incluir no código HTML valores de variáveis do script.

O código a seguir é complemento dos scripts anteriores. Ele envia um agradecimento ao usuário que tenha preenchido um formulário.

print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "\n"; print "Obrigado\n"; print " \n"; print "body\n"; print "

Obrigado

\n"; print "Agradecemos que tenha preenchido nosso formulário.\n"; print "Para seu controle, seguem os dados do mesmo:

\n"; for($i=0;$i<=$max;$i=$i+2) { print "$Form[$i]: $Form[$i+1]
\n"; } print "


\n"; print "Seu nome, SeuNome\@dominio.com"; print "\n"; print "\n";

Pode-se escrever código HTML com facilidade usando a função print da Perl. No exemplo foi criada e enviada ao navegador uma página HTML completa.

Importante no caso é a primeira diretiva: print "Content-type: text/html\n\n";. Isto ainda não é código HTML. A primeira coisa que um navegador solicitante precisa receber é um cabeçalho HTML (HTML header). Este cabeçalho precisa, no mínimo, indicar o tipo de dado que será enviado. Com esta diretiva informa-se que o código a ser enviado é do tipo texto HTML. Muito importante e imprescindível é a colocação dos dois \n\n no final. O primeiro \n é a quebra de linha para Content-type: text/html. O segundo \n envia uma quebra de linha (ou linha vazia), que é o que o navegador solicitante espera após a informação do tipo de dado. Após a linha vazia, o navegador aguarda o recebimento dos dados propriamente ditos. Este é o procedimento para se estabelecer uma conexão no protocolo http. É isso aí.

Dito isto, vamos esclarecer o envio dos dados. Com a função print envia-se, linha após linha, todo o código HTML desejado. O laço for, no meio do exemplo, merece uma observação especial. Do interior desse laço são enviados os conteúdos da lista @Form em formato HTML. Esta possibilidade de incluir variáveis no código HTML enviado é o motivo pelo qual a CGI é também frequentemente denominada de "HTML dinâmico".

Para terminar, verifique cuidadosamente o modo como o comando mailto é escrito no final do código exemplo. Quando você criar tags de HTML que exijam a presença de aspas duplas, como é o caso de href, as aspas precisam ser precedidas por uma barra invertida \ que serve como máscara. Caso você esqueça da barra invertida, o interpretador Perl gerará um erro e interromperá a execução do script. Isto me aconteceu mais de uma vez! Da mesma forma, caracteres reservados, que tenham uma função especial, também precisam de máscara. É o caso, por exemplo, da arroba @ que, sem máscara, identifica uma lista.

лучшие казиноКупить качественные кисти для губсайт отзывовкакой фирмыстоимость crmлобановский александртелефон никас

Informações adicionais