Muitos acham que o CGI não é capaz de fazer todas as coisas que o php pode. A "moda" atual do fórum é o avatar dinâmico, aleatório..... e isso pode ser feito facilmente pelo Perl.... apenas utilizando um .htaccess na pasta do avatar.
Se seu servidor permitir rodar cgis com quaisquer extensões como gif, jpg, jpeg, png, etc.., este passo do .htaccess não será preciso tomar. Caso contrário, faça o seguinte:
.htaccess
Crie um arquivo chamado .htaccess (sem nome mesmo. apenas extensão)
Adicione os seguintes dados nele:
Options +ExecCGI
SetHandler cgi-script
Salve-o, crie uma pasta qualquer em seu site e envie o .htaccess para dentro dela.
Após enviar o .htaccess, sua pasta já será capaz de ler arquivos cgi com extensão de arquivos de imagens... agora vc poderá criar os scripts para mostrar os avatars:
Avatar dinâmico
Crie um arquivo com qualquer extensão entre gif .jpeg .jpg e .png
Este que criei possui várias características como IP, Hora, Browser:
#!/usr/bin/perl
print "Content-type:text/html\n\n";
use CGI::Carp(fatalsToBrowser);
use GD;
$nome = "SEU NOME";
#Coloque seu nome.
$offset = "-3";
#Zona offset. (Diferença de horário)
&hora;
&data;
$ip = "$ENV{'REMOTE_ADDR'}";
$browser = "$ENV{'HTTP_USER_AGENT'}";
if ($browser =~ /MSIE/){
$browser = "IExplorer";
}else{
if ($browser =~ /Netscape/){
$browser = "Netscape";
}else{$
browser = "?Netscape?"}}
sub hora{
($seg,$min,$hr,$dia,$mes,$ano) = (gmtime);
$hr = $hr-3;
$hr = $hr;
if ($hr < "10"){$hr = "0"."$hr";}if ($min < "10"){$min = "0"."$min";}if ($seg < "10"){$seg = "0"."$seg";}
$hr = $offset+$hr;
$hora = "$hr:$min:$seg";
}
sub data{
($seg,$min,$hr,$dia,$mes,$ano) = gmtime();
if ($dia < "10"){$dia = "0"."$dia";}if ($mes < "10"){$mes = "0"."$mes";}if ($ano < "10"){$ano = "0"."$ano";}
$ano = $ano+1900;
$data = "$dia"."/"."$mes"."/"."$ano";
}
############ CORES DO AVATAR DINÂMICO #############
$imagem = new GD::Image(100,100);
$cinza = $imagem->colorAllocate(100,100,100);
$cinza2 = $imagem->colorAllocate(199,199,199);
$branco= $imagem->colorAllocate(255,255,255);
##############################################
############# VISUAL DO AVATAR DINÂMICO ############
$imagem->rectangle(8,92,92,6,$branco);
$imagem->rectangle(2,97,97,3,$cinza2);
$imagem->rectangle(10,30,90,90,$cinza2);
$imagem->fill(50,40,$cinza2);
$imagem->string(gdLargeFont,10,10,"$nome",$branco);
$imagem->string(gdTinyFont,12,31,"Horas:",$cinza);
$imagem->string(gdTinyFont,15,41,"$hora",$cinza);
$imagem->string(gdTinyFont,12,51,"IP:",$cinza);
$imagem->string(gdTinyFont,15,61,"$ip",$cinza);
$imagem->string(gdTinyFont,12,71,"Browser:",$cinza);
$imagem->string(gdTinyFont,15,81,"$browser",$cinza);
##############################################
binmode STDOUT;
print $imagem -> png;
Pronto! Basta enviar o arquivo ao servidor!
Avatar aleatório
Crie um arquivo com qualquer extensão entre gif .jpeg .jpg e .png
Ele deve conter os seguintes dados:
#!/usr/bin/perl
print "Content-type:text/html\n\n";
use CGI::Carp(fatalsToBrowser);
use GD;
@avatars = ("avatar.gif","avatar2.gif","avatar3.gif","avatar....gif");
# Avatars, pode colocar o tanto q vc aguentar :_)
$n = int rand @avatars;
$imagem = newFromJpeg GD::Image("$avatars[$n]");
binmode STDOUT;
print $imagem -> png;
Pronto! Basta colocar o local de seus avatars no array @avatars e enviar o arquivo ao servidor!
Avatar dinâmico e aleatório
Crie um arquivo com qualquer extensão entre gif .jpeg .jpg e .png
Ele deve conter os seguintes dados:
#!/usr/bin/perl
print "Content-type:text/html\n\n";
use CGI::Carp(fatalsToBrowser);
use GD;
@avatars = ("info","avatar.gif");
# Lista das imagens a serem randomizadas. #info# é a imagem dinâmica,
# caso não queira exibí-la, apenas mude-a para seu avatar desejado.
$nome = "Stone Rock";
#Caso queira usar imagem dinâmica coloque o seu nome.
$offset = "-3";
#Zona offset. (Diferença de horário)
$n = int rand @avatars;
if ($n eq 0){
if ($avatars[0] eq "info"){
&data;
&hora;
$ip = "$ENV{'REMOTE_ADDR'}";
$browser = "$ENV{'HTTP_USER_AGENT'}";
if ($browser =~ /MSIE/){
$browser = "IExplorer";
}else{
if ($browser =~ /Netscape/){
$browser = "Netscape";
}else{$browser = "?Netscape?"}}
sub hora{
($seg,$min,$hr,$dia,$mes,$ano) = (gmtime);
$hr = $hr-3;
$hr = $hr;
if ($hr < "10"){$hr = "0"."$hr";}if ($min < "10"){$min = "0"."$min";}if ($seg < "10"){$seg = "0"."$seg";}
$hr = $offset+$hr;
$hora = "$hr:$min:$seg";
}
sub data{
($seg,$min,$hr,$dia,$mes,$ano) = gmtime();
if ($dia < "10"){$dia = "0"."$dia";}if ($mes < "10"){$mes = "0"."$mes";}if ($ano < "10"){$ano = "0"."$ano";}
$ano = $ano+1900;
$data = "$dia"."/"."$mes"."/"."$ano";
}
############ CORES DO AVATAR DINÂMICO #############
$imagem = new GD::Image(100,100);
$cinza = $imagem->colorAllocate(100,100,100);
$cinza2 = $imagem->colorAllocate(199,199,199);
$branco= $imagem->colorAllocate(255,255,255);
##############################################
############# VISUAL DO AVATAR DINÂMICO ############
$imagem->rectangle(8,92,92,6,$branco);
$imagem->rectangle(2,97,97,3,$cinza2);
$imagem->rectangle(10,30,90,90,$cinza2);
$imagem->fill(50,40,$cinza2);
$imagem->string(gdLargeFont,10,10,"$nome",$branco);
$imagem->string(gdTinyFont,12,31,"Horas:",$cinza);
$imagem->string(gdTinyFont,15,41,"$hora",$cinza);
$imagem->string(gdTinyFont,12,51,"IP:",$cinza);
$imagem->string(gdTinyFont,15,61,"$ip",$cinza);
$imagem->string(gdTinyFont,12,71,"Browser:",$cinza);
$imagem->string(gdTinyFont,15,81,"$browser",$cinza);
##############################################
binmode STDOUT;
print $imagem -> png;
}else {
$imagem = newFromJpeg GD::Image("$avatars[$n]");
binmode STDOUT;
print $imagem -> png;
}
}else{
$imagem = newFromJpeg GD::Image("$avatars[$n]");
binmode STDOUT;
print $imagem -> png;
}
Dica: Caso ao enviar o arquivo em formato de imagem ele não execute-a corretamente (Internal Server Error), tente enviá-la com a extensão cgi ou pl e após isso alterar sua extensão para alguma de imagem.
Não esqueça que os arquivos devem conter o mesmo tamanho, caso contrário o tamanho do primeiro arquivo será padronizado ao resto! O CHMOD deve ser efetuado normalmente - 755.