Foros del Web » Programación para mayores de 30 ;) » Programación General »

CGI en Perl para Acabar la carrera!

Estas en el tema de CGI en Perl para Acabar la carrera! en el foro de Programación General en Foros del Web. ¡¡Hoola familia!! ¿Cómo estáis? Tengo que pediros un favor grande, necesito un CGI en Perl urgente para acabar la carrera. Es la última asignatura que ...
  #1 (permalink)  
Antiguo 12/08/2004, 09:35
 
Fecha de Ingreso: julio-2004
Mensajes: 9
Antigüedad: 19 años, 9 meses
Puntos: 0
Exclamación CGI en Perl para Acabar la carrera!

¡¡Hoola familia!!

¿Cómo estáis?

Tengo que pediros un favor grande, necesito un CGI en Perl urgente para acabar la carrera. Es la última asignatura que me queda, es optativa y no pude asistir a clase. El caso es que me piden para el 1 de Septiembre un CGI en Perl que devuelva un rótulo (imagen) formado a partir de unos parámetros que se pasarían desde un formulario. Estos parámetros serían:

- Un texto.
- Color.
- Tipo de letra.
- Tamaño.

Estos parámetros generarían el archivo de imagen correspondiente. Además se debe guardar un historial de estos archivos:

Si anteriormente se ha generado algún archivo de imagen con las mismas características (mismos parámetros), el archivo no se ha de volver a generar, sino que se devuelve el que corresponda en el historial almacenado.

El problema es que nunca he trabajado con CGIs ni Perl, y no dispongo de medios para probarlo y trabajarlo, ni tampoco de mucho tiempo, ya que estoy metido en el proyecto final de carrera.

Agradecería enormemente (incluso pagando) si alguien se ofreciera para ayudarme con el trabajo, almenos darme una idea inicial con la que trabajar y ayudarme con los posibles errores y pruebas.

Espero por favor vuestros comentarios. Muy agradecido de antemano,

[email protected]
  #2 (permalink)  
Antiguo 12/08/2004, 11:02
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Para empezar te recomiendo que te leas los tutoriales de www.perlenespanol.com

Yo ahora estoy de vacaciones y cuando llegue comienzo la facultad (además del laburo) con lo cual no creo poder ayudarte (haciéndolo)...Pero si te puedo ayudar si te lo programas tu mismo, con algunos problemas que te pueden ir surgiendo.

Fíjate que la sintaxis de perl es muy similar a la de C...Que seguro lo viste en la facultad.

Saludos
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 12/08/2004, 11:34
 
Fecha de Ingreso: julio-2004
Mensajes: 9
Antigüedad: 19 años, 9 meses
Puntos: 0
Ok, voy a empezar a mirarme todo, te escribiré cuando adelante algo, por favor visita el foro y los mensajes privados o escríbeme al email:

[email protected]

¡¡Muchas gracias!!
  #4 (permalink)  
Antiguo 12/08/2004, 11:38
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
pues me meto casi a diario al foro...Y eso que estoy de vacaciones...jaja

El lunes que viene ya voy a estar en la oficina así que te escribo ni bien llegue.

Si usas msn agrégrame: [email protected]

Saludos
__________________
Esteban Quintana
  #5 (permalink)  
Antiguo 16/08/2004, 11:50
 
Fecha de Ingreso: julio-2004
Mensajes: 9
Antigüedad: 19 años, 9 meses
Puntos: 0
CGI en Perl para acabar la carrera

Hoola amigo,

ya hice algo que parece que funciona, pero no se me ocurre como puedo guardar un "historial" con las imagenes generadas y devolverlas en caso de que esten en este historial.

¿Se te ocurre alguna manera sencilla de hacerlo? Por no complicarlo con acceso a bases de datos. Si me pudieras ayudar te estaría muy agradecido, voy fatal de tiempo y tengo que acabar también el proyecto para ya!!

De verdad, estoy dispuesto a pagarte o a hacerte un regalo, lo que tu me digas. Los requisitos del cgi por si quieres consultarlos están en el tema del foro.

¡Espero tu respuesta! ¡Muchísimas gracias por todo!

[email protected]

Este es el cgi provisional, sin historial de imagenes generadas:

#!/usr/bin/perl



#declaro uso de GD
use GD;

#construccion tabla asociativa para tamano texto
%tam = ("1",gdTinyFont,"2",gdSmallFont,"3",gdMediumBoldFo nt,"4",gdLargeFont,"5",gdGiantFont);

#reconocimiento metodo de pansaje de datos, si es un post lectura para input standard ( en esto programa sera siempre un GET )
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
} else {
@pairs = split(/&/, $ENV{'QUERY_STRING'});
}


#control de datos recibidos e insercion en tabla asociativa FORM
foreach $pair (@pairs) {
($key, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/\cM/\n/;
eval("\$$key = \"$value\"");
$FORM{$key} = $value;
}


#asociacion de una varX para cada uno de los elementos recibidos en la tabla asociativa
foreach $var (keys(%FORM)){
$var = $FORM{$var};
}

#declaracion de GD construccion de una imagen de 640x400 pixeles
$im = new GD::Image(640,400);


#reserva de colores segn RGB
$Blanco = $im->colorAllocate(255,255,255);
$Negro= $im->colorAllocate(0,0,0);
$Rojo= $im->colorAllocate(255,0,0);
$Azul = $im->colorAllocate(0,0,255);
$Celeste =$im->colorAllocate(0,200,155);
$Gris =$im->colorAllocate(190,190,190);
$Verde = $im->colorAllocate(0,255,0);
$Salmon = $im->colorAllocate(250,128,114);
$Naranjas = $im->colorAllocate(255,165,0);
$Coral = $im->colorAllocate(255,127,80);
$Tomate = $im->colorAllocate(255,99,71);
$Rosa = $im->colorAllocate(255,192,203);
$Marron = $im->colorAllocate(176,48,96);
$Magenta = $im->colorAllocate(255,0,255);
$Orquidea = $im->colorAllocate(218,112,214);

#preparacion de tabla asociativa para todos los colores declarados

%col = ("Salmon",$Salmon,"Naranjas",$Naranjas,"Coral",$Co ral,"Tomate",$Tomate,"Rosa",$Rosa,"Marron",$Marron ,"Magenta",$Magenta,"Orquidea",$Orquidea,"Blanco", $Blanco,"Negro",$Negro,"Rojo",$Rojo,"Azul",$Azul," Celeste",$Celeste,"Gris",$Gris,"Verde",$Verde);

#extraccion de las tablas de los valores seleccionados
$color = $col{"$var3"};
$texto = $var1;
$tamano = $tam{"$var2"};


#parametros de la imagen ( transparencia y modo interlace )
$im->transparent($white);
$im->interlaced('true');

#instruccion que disena el texto en la imagen
#$im->string($tamano,10,150,$texto,$color);
$im->stringFT($color,"/usr/X11R6/lib/X11/fonts/TTF/luxisb.ttf",$tamano,0,0,150,$texto);
#modo de salida binario
binmode STDOUT;

#impresion en salida de la cabecera para imagen PNG
print "Content-type: image/png\n\n";

#impresion de la imagen generada
print $im->png

Última edición por juacais; 16/08/2004 a las 11:52
  #6 (permalink)  
Antiguo 17/08/2004, 11:11
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Para hacer un historial de imágenes se me ocurren 2 opciones:

1) Guardando las imágenes en un motor de base de datos pero me digiste que no quieres complicarla

2) hacer un directorio de imagenes en donde almacenamos todas las imágenes y luego cremos un .TXT en donde almacenamos toda la info sobre esa imagen, como la URL, el nombre de la imagen, la descripción, el ancho el alto...etc.

Te recomiendo la segunta opción...Para generar la base de datos te muestro un script que uso yo...

Código:
#!c:/perl/bin/perl.exe

# abre el directorio raiz de imágenes, abre uno a uno los distintos subdirectorios
# y lista todas las imágenes que haya en el directorio, calculando su url y
# sus dimensiones para cargarlos en la base de datos .TXT

use strict;
use Image::Size;

        # # # D E F I N I C I O N E S # # #
my (@directorios,$directorio,$sub_directorio,@imagenes,$imagen,$ancho,$alto,$img_url);
my ($registro,$string_max_length,$registro_length);

my $directorio_padre = '../../htdocs/imagenes/c/';

print "Content-type: text/html\n\n";
&db_generator();
exit(1);


sub db_generator {

opendir (DATABASEDIR, "$directorio_padre") || &error('abrir','directorio');
@directorios = readdir (DATABASEDIR);
closedir(DATABASEDIR) || &error('cerrar','directorio');

shift(@directorios);
shift(@directorios);

foreach $directorio (@directorios){
         $sub_directorio = $directorio_padre . '/' . $directorio;
         opendir (DATABASEDIR, "$sub_directorio") || &error('abrir','directorio');
         @imagenes = readdir (DATABASEDIR);
         closedir(DATABASEDIR) || &error('cerrar','directorio');

         shift(@imagenes);
         shift(@imagenes);

         $imagen;
         foreach $imagen (@imagenes){
                  $img_url = $sub_directorio . '/' . $imagen;
                  ($ancho,$alto) = imgsize($img_url);
                  $registro = "$imagen||$directorio||$ancho||$alto||lugar||descripcion||autor||";
                  $string_max_length = '----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------';
                  $registro_length = length($registro);
                  substr($string_max_length,0,$registro_length,$registro);

                  print $string_max_length . "\n";
         }
}
}

#####################################################

sub db_ordenar{
############################### O r d e n a r - l a - b a s e - d e - d a t o s
open (DATABASE, "<img_c_db.txt") || &error('abrir','archivo');
my @registros = <DATABASE>;
close (DATABASE) || &error('cerrar','archivo');

@registros = sort @registros;

   my $registro;
   foreach $registro (@registros){
       $registro =~ s/\n//g;
       print $registro . "\n";
   }
###############################################################################
}
#####################################################


sub error{
 print "Content-type: text/html\n\n";
 print "Error: Cant $_[0] the $_[1]";
 exit(1);
}
Espero que te sirva...Saludos
__________________
Esteban Quintana
  #7 (permalink)  
Antiguo 23/08/2004, 01:55
 
Fecha de Ingreso: julio-2004
Mensajes: 9
Antigüedad: 19 años, 9 meses
Puntos: 0
hola amigo,

disculpa de nuevo las molestias pero estoy realmente apurado para entregar el cgi que comentamos en el foro, y ahora estoy teniendo problemas con el ordenador y con el funcionamiento de los cgi, porque tengo otros cgi que funcionaban en el directorio cgi-bin y han dejado de funcionar. Siempre que llamo a algún cgi me sale este error:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.



--------------------------------------------------------------------------------

Apache/1.3.29 Server at localhost Port 80

Y de verdad que ahora no puedo dedicarme a esto porque tengo que entregar tambien el proyecto y presentarlo el dia 21. Te agradecería muchísimo si me ayudaras a acabar el script, te envío adjunto la parte que hice yo para generar la imagen, me falta guardarla en el directorio y enlazarla con la parte de recuperacion de la base de datos que me pasaste, comprobando antes de generarla si existe y si es asi devolverla. Dime por favor si podrías ayudarme a acabarlo y a probar que funcione y cuánto y cómo quieres que te pague, de verdad.
  #8 (permalink)  
Antiguo 23/08/2004, 05:46
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Ese error a mi también me lo tiraba y no me acuerdo cual era específicamente el problema...No cambiaste nada de los scripts ?

puede que no tenga la primera linea de código (dirección del intérprete) o que tenga algún error de syntaxis, o que no tenga los permisos de ejecución (en linux chmod 755)

Esos son los errores más comunes...

Saludos
__________________
Esteban Quintana
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:11.