Categoria Dicas CGI/Perl - Lendo Diretórios

Posted by webmaster | CGI/Perl |

Como a primeira matéria/dica em CGI-Perl, irei ensinar hoje a como ler diretórios e abrir arquivos nos mesmos.

O código é simples, segue:

opendir (MEUDIR, “/home/LOGIN/www/meudir”);
@pegoodir = readdir(MEUDIR);
closedir (MEUDIR);

Explicando o código:

- opendir (MEUDIR, “/home/LOGIN/www/meudir”);
- Este código abre o diretório especificado

- @pegoodir = readdir(MEUDIR);
- Neste, coloco todos os arquivos do diretório em um vetor (o @pegoodir é um vetor).

- closedir (MEUDIR);
- Encerro a leitura do diretório

1. Lendo os arquivos do diretório e imprimindo seus dados

Irei utilizar o comando foreach para pegar os nomes dos arquivos no vetor e abrí-los.

A seguir o código e a explicação da utilização parte a parte.

#!/usr/bin/perl

print “Content-type: text/html\n\n”; # Digo ao script o conteúdo do documento

# abro o diretório
opendir (MEUDIR, “/home/LOGIN/www/meudir”);
@pegoodir = readdir(MEUDIR);
closedir (MEUDIR);
# já peguei todos os dados e armazenei no vetor, fecho o diretório

foreach (@pegoodir) {
$dados = $_; # como só existe uma coluna no vetor, utilizei o $_ para pegar esta coluna.

if ($dados eq “.”) { next; } #prossigo se o nome do arquivo for só . (ver explicação abaixo)
if ($dados eq “..”) { next; } #prossigo se o nome do arquivo for só ..

open (MEUFILE, “/home/LOGIN/www/meudir/$dados”);
@minhas_linhas = <MEUFILE>;
close (MEUFILE);

print “<b>Arquivo $dados</b>: @minhas_linhas

“; # imprimo os arquivos do diretório.

} # fecho o foreach
Agora explicando o comando:

if ($dados eq “.”) { next; } #prossigo se o nome do arquivo for só .
if ($dados eq “..”) { next; } #prossigo se o nome do arquivo for só ..

Um diretório é formado pela seguinte sequencia:
. # este significa a volta a pasta raiz
.. # este volta para a pasta anterior
a # pasta de nome a
b # pasta de nome b
c # pasta de nome c
a.EXT # arquivo a.ext
b.EXT # arquivo b.ext
c.EXT # arquivo c.ext
Utilizei o código porque, sem ele, o script intenderá o dado “.” e “..” como arquivos e irá abrí-los, demorando na execução do sistema.

Inserindo este comando next; , pulo para a próxima ação, excluindo a atual.

Categoria Dicas CGI/Perl - Lendo o tamanho de seus arquivos

Posted by webmaster | CGI/Perl |

Um simples código, lê o tamanho e informa para você.

#!/usr/bin/perl

$arquivo = “/home/USUARIO/www/download/flashtrial.zip”; # caminho p/ o arquivo a ser lido

$tamanho=(-s “$arquivo”); # este código que faz a leitura do tamanho

print “Content-type: text/html\n\n”; # indico o tipo de documento (texto html)

print qq~ o arquivo $arquivo tem $tamanho bytes ~; # imprimo o resultado

Categoria Dicas CGI/Perl - HTTP Cookies

Posted by webmaster | CGI/Perl |

Há duas maneiras:

1 - Com o módulo CGI:

#!/usr/bin/perl

use CGI; #chamo o módulo CGI
use CGI::Cookie; #dentro dele, chamo o módulo do cookie

$cgi = new CGI;

if ($cgi->cookie(’meu_cookie’)) { #caso o cookie exista, imprimo

print “Content-type: text/html\n\n”; #tipo de documento: HTML
print “Cookie ativo!
“;
print $cgi-cookie(’meu_cookie’); #meu cookie

} else { #se não existe, ele grava

$cookie = $cgi->cookie( -name=>’meu_cookie’, -value=>”Estou gravado!”, -expires=>”+2m”); #gravando o cookie chamado de ‘meu_cookie’ com o valor de ‘Estou gravado’ e expirando em 2 minutos.
print $cgi->header( -cookie=>$cookie ); #imprimo o cookie no navegador
print “Gravando cookie…. ok, salvo!
Atualize seu navegador”;

} #fecho o else

Opções:

-domain => ‘.codigofonte.net’ - significa que o cookie só funcionará com o domínio codigofonte.net.

-path => ‘/cgi-bin/scripts’ - aqui, você colocará o path para o script que irá utilizar este cookie, neste caso, apenas scripts que estão no dir /cgi-bin/scripts poderão utilizar.

-secure => ‘1′ - 1 retorna valor verdadeiro para o navegador, e assim, o cookie só será carregado caso um protocolo criptografado esteja em uso.

2 - Sem utilizar módulo.

Uma outra maneira, não muito recomendada, é a não utilização de módulos.

#!/usr/bin/perl

foreach (split(/; /,$ENV{’HTTP_COOKIE’})) {
$_ =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(”C”, hex($1))/eg;
($nome,$valor) = split(/=/); $COOKIE{$nome} = $valor;
}

if ($COOKIE{’meu_biscoito’}) { #caso o cookie exista, imprimo

print “Content-type: text/html\n\n”; #tipo de documento: HTML
print “Cookie (biscoito) ativo!
“;
print “$COOKIE{’meu_biscoito’}”; #meu cookie

} else { #se não existe, ele grava

print “Set-Cookie: meu_biscoito=ESTOU GRAVADO VIU?!; expires=+2m ;\n”;
print “Content-type: text/html\n\n”; #tipo de documento: HTML
print “Gravando cookie…. ok, salvo!
Atualize seu navegador”;

} #fecho o else

Além das opções padrões ( name, value, expires ), ainda contamos com os seguintes parâmetros:

domain = ‘.codigofonte.net’ - significa que o cookie só funcionará com o domínio codigofonte.net.

path = ‘/cgi-bin/scripts’ - aqui, você colocará o path para o script que irá utilizar este cookie, neste caso, apenas scripts que estão no dir /cgi-bin/scripts poderão utilizar.

secure = ‘1′ - 1 retorna valor verdadeiro para o navegador, e assim, o cookie só será carregado caso um protocolo criptografado esteja em uso.

Não esqueça de separar com vírgulas ou ponto-vírgulas os atributos que você utilizar, exemplo:

1. $cookie = $cgi->cookie( -name=>’meu_cookie’, -value=>”Estou gravado!”, -domain => ‘.codigofonte.net’, -expires=>”+2m”);

2. [cf] print “Set-Cookie: meu_biscoito=ESTOU GRAVADO VIU?!; domain = ‘.codigofonte.net’; expires=+2m ;\n”; </i> <!– code –>

Para o tempo que o cookie irá existir, você poderá especificar utilizando os códigos a seguir:

<I>s - segundo
m - minuto
h - hora
w - semana
M - mês
y - ano
now - agora</I>

Sendo [cf] +1m </i> <!– code –> para o cookie expirar daqui a 1 minuto. Caso queria que o cookie expire agora, utilize o código [cf]now .

Page 1 of 11