Página 1 de 2

Tengo problemas con CGI

NotaPublicado: 2006-07-13 13:55 @621
por JAPM
¡Qué tal comó están todos! Antes que nada quiero decirles que soy nuevo en este lenguaje(Perl) y la verdad tengo mucho interés en aprender más, he leído algo de este lenguaje y me atreví hacer un cgi claro tomando de ejemplo uno que ya estaba hecho, tengo una página hospedada en un servidor, un dominio .com.mx y el servidor soporta php y perl para los cgi, sé cuales son las rutas y tengo los permisos 755 en la carpeta y en el archivo .cgi, pero a la hora de hacer una prueba y enviar el form me sale el siguiente error "Puede que la página solicitada ya no exista haya cambiado de nombre o no esté disponible temporalmente" http 404 y por mas que he intentado solucionar el problema no he podido a lo mejor es un error pequeño pero debido a mi inexperiencia pues no lo he encontrado. Este es el cgi del que les comento con el código de la página HTML

Código: Seleccionar todo
<FORM action="nombre.cgi" method=post>
     Nombre: <input type=text name=nombre size=30><p>
Apellidos: <input type=text name=apellido size=50s><p>
Email: <input type=text name=email size=20><p>

Estamento: <select name=estamento>
<option value=pas>PAS
<option value=pdi>PDI
</select>
<p>
Introduzca sus comentarios:
<p>
<textarea name=comentar rows=5 cols=80>
</textarea>

<input type=submit value="Enviar">
</form>

Código: Seleccionar todo
#!/usr/bin/perl -- -*-perl-*-

# Definición del programa para enviar correo
$progmail = '/usr/sbin/sendmail';

# Usuario al que se enviarán los mensajes.
$destino = '[email protected]';

# Indica que se trata de un documento HTML
print "Content-type: text/html\n\n";

# Obtiene la entrada
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

# Divide las variables entre nombre y valor.
@pairs = split(/&/, $buffer);

# Optiene todas las variables y sus valores
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);

$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

$FORM{$name} = $value;
}


# Ahora enviamos el mail al $destino
open (SALIDA, "|$progmail $destino") || die "No puedo abrir $progmail!\n";
print SALIDA "Reply-to: $FORM{'email'} ($FORM{'nombre'} $FORM{'apellidos'})\n";
print SALIDA "Subject: Comentarios al formulario de prueba ($FORM{'nombre'} $FORM{'apellidos'})\n\n";
print SALIDA "$FORM{'nombre'} $FORM{'apellidos'} del $FORM{'estamento'}envio \n";
print SALIDA "El siguiente comentario::\n\n";
print SALIDA "------------------------------------------------------------\n";
print SALIDA "$FORM{'comentar'}";
print SALIDA "\n------------------------------------------------------------\n";
close (SALIDA);


No sé qué parte esté mal, pero les agradecería la ayuda, ojalá y quede resuelto.

NotaPublicado: 2006-07-13 14:03 @627
por explorer
En el formulario, en el campo apellidos, has puesto de tamaño '50s'.

En el servidor donde estás alojado, ¿tienen el programa sendmail que usa tu programa?

En este foro hay varios tutoriales sobre CGI. Mírales...

NotaPublicado: 2006-07-13 14:07 @630
por explorer
Prueba antes con un CGI mínimo para comprobar que el sistema de cgi funciona en tu servidor:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
# CGI MINIMO
# Joaquín Ferrero. 2006.
# Este cgi sirve para comprobar si el servidor funciona con Perl+CGI
#
use CGI       qw(:standard      );
use CGI::Carp qw(fatalsToBrowser);

print
    header,
    start_html('CGI MINIMO'),
    h1('CGI MINIMO'),
    hr,
    p('Si ves este texto es que S&Iacute; est&aacute; funcionando bien.'),
    hr;

# Aquí sacamos la lista de los parámetros
# en caso de que le haya sido pasado alguno
my @parametros = param();
foreach my $par ( @parametros ) {
        print p($par);
        print blockquote(param( $par ));
}

print end_html;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2006-07-13 17:53 @787
por JAPM
Bueno por ahí te había comentado que el servidor tiene el send mail y también había puesto la ruta, mi pregunta es ¿cómo ejecuto este código mínimo??, por lógica se supone que nada más reemplazo el código del archivo cgi que tengo por el que me diste, si es así no funcionó y me manda el mismo mensaje, si te sirve de algo la página en donde se encuentra el formulario es http://www.misitio.com.mx/contactanos.html y esta desarrollada en Dreamweaver, por ahí revisando documentación de este programa me encontré que soporta PHP y otros lenguajes pero nunca vi que soportara Perl; esto tiene algo que ver digo la página está en un servidor y yo ejecuto el cgi desde el servidor, creo que tiene que haber problema, la última duda es que a lo mejor estoy guardando el archivo cgi de una forma equivocada, yo lo guardo desde el block de notas así "archivo.cgi" con las comillas y codificación ANSI, bueno espero que estos datos les sirvan para mi problema.

NotaPublicado: 2006-07-14 05:59 @291
por explorer
Para ejecutar el código mínimo: Subes el código minimo.pl (o como le hayas llamado) al servidor y lo colocas en la carpeta reservada para los cgi (suponemos que es cgi-bin). Luego vas al navegador y escribes la URL de tu host, más la carpeta cgi más el nombre del programa. Podría ser algo como esto: http://www.misitio.com.mx/cgi-bin/minimo.pl . Y le das para que te lo baje. Si todo está correcto, deberías ver el mensaje del programa. Si algo anda mal, el programa te tiene que dar una pista. Si no ves nada, tendrás que pedir ayuda al proveedor de Internet.

Que Dreamweaver soporte PHP y no Perl, no quiere decir nada en este caso. Por ejemplo, esta página: http://TurismoPenafiel.com/perl/ribera.pl está hecha con Dreamweaver, pero los datos dinámicos se los está dando un programa Perl que está consultando una hoja de cálculo en Excel...

A la hora de guardar el cgi y luego subirlo DEBES seguir las indicaciones de tu servidor:
* Qué extensión debe tener el cgi (.pl, .cgi, ninguna, o cualquiera)
* En qué directorio se debe colocar
* ¿Debo crear ese directorio o me lo da el proveedor?
* Permisos de ejecución, tanto para el directorio como para el cgi, para todos; al menos para el usuario que ejecuta el servidor web
* Sistema operativo del servidor. Dependiendo de si es unix o windows, deberé cambiar los '/' por los '\'.
* ¿Qué módulos Perl están instalados? Algunos proveedores tienen una página con la lista de todos los módulos instalados. ¿Pueden instalarme alguno a mayores?
* Cambios específicos según la instalación. ¿Qué cambios debo de hacer a mi programa con respecto a una instalación normal por exigencias del entorno de funcionamiento dentro del servidor?

En cuanto a la forma de subir el fichero, ¿por qué dices que le pones las comillas al nombre del fichero? Y para subirlo, con la codificación que indicas es suficiente.

Una cosa. ¿Has probado antes tu cgi en tu propio ordenador antes de subirlo?

NotaPublicado: 2006-07-14 16:43 @738
por JAPM
Bueno hice e investigué todo lo que me habías comentado y en el servidor no habla de módulos de Perl, nada más de PHP y las extensiones que soporta son .pl,.cgi, la ruta para ejecutar estos archivos es #!/usr/bin/perl, la versión de Perl es v5.6, la ruta para subir el archivo es /cgi-bin creado por el servidor y sobre la forma de subir el archivo no lo hago con comillas, las comillas las uso para guardar el archivo que hago en el bloc de notas. Y ejecuté el programa mínimo y me sale un error de software; este es el error ---syntax error at minimo.pl line 15, near ")
hr"
Execution of minimo.pl aborted due to compilation errors.

---


Y por último no he probado el cgi en mi computadora porque no la he configurado, pero estoy en eso ya que leí que es una buen hábito ejecutar los scripts localmente antes de subirlos al servidor; bueno con esto me doy una idea y ya estoy trabajando en eso. Gracias

NotaPublicado: 2006-07-14 17:04 @752
por explorer
Corregido... faltaba una ',' al final de la línea...

Pero si ya te devuelve el error es que vamos bien, porque al menos sabemos que ha intentado compilar el mínimo...

NotaPublicado: 2006-07-14 21:30 @938
por JAPM
Bueno antes que nada quiero agradecerte por las respuestas y la última la revisé, pero haciendo pruebas me encontré con otras líneas de código y funcionó la prueba; el código es el siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
print "<html><head><title>Salida de la examinación</title></head><body>\n";
print "<h1>¡Qué bien, funciona!</h1>\n";
print "</body></html>\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora nada más me falta hacer el cgi completo para que no haya problemas y hacer ese webform, mostraré por aquí el código para que me des tu punto de vista, por lo pronto está comprobado que sí funciona todo lo demás... saludos

NotaPublicado: 2006-07-15 04:42 @237
por explorer
Por este web encontrarás varios hilos de discusión donde hay código que muestra cómo enviar un correo con los datos de un formulario.

Usa el sistema de búsqueda, que es muy fácil.

NotaPublicado: 2006-07-20 15:37 @692
por JAPM
Antes que nada quiero agradecerte las respuestas me han servido de mucho, ya tengo listo el formulario envia la informacion a una cuenta de correo electronico, ahora tengo otras preguntas de las cuales no he encontrado por aqui, cuando se envian estos datos muestro por medio del CGI una pagina web dando las gracias, quisiera que se mostrara una pagina web que tengo ya hecha con el diseño de todo el sitio, la pregunta es como le hago, el codigo para que me aparezca la pagina que te menciono es el siguiente:

# Imprime el título y la cabecera
print "<Head><Title>Gracias</Title></Head>";
print "<Body><H1>Muchas Gracias, sus comentarios seran bienvenidos</H1>";
# Imprime el texto del texto a mostar.
print "Gracias por enviar sus comentarios a <I>Mi empresa</I>!<P>";

ahora como puedo incorporar una pagina que ya tengo hecha?? para que sea mas estetico, creo que debe de haber una instruccion para hacer esto pero no la he encontrado, he buscado y nada. Espero me puedas ayudar.