• Publicidad

Tengo problemas con CGI

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Tengo problemas con CGI

Notapor JAPM » 2006-07-13 13:55 @621

¡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.
JAPM
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2006-07-13 13:14 @593

Publicidad

Notapor explorer » 2006-07-13 14:03 @627

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...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2006-07-13 14:07 @630

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.005 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2009-10-12 14:55 @663, editado 8 veces en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor JAPM » 2006-07-13 17:53 @787

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.
Última edición por explorer el 2014-05-19 09:19 @429, editado 2 veces en total
Razón: Ortografía
JAPM
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2006-07-13 13:14 @593

Notapor explorer » 2006-07-14 05:59 @291

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?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor JAPM » 2006-07-14 16:43 @738

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
JAPM
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2006-07-13 13:14 @593

Notapor explorer » 2006-07-14 17:04 @752

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...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor JAPM » 2006-07-14 21:30 @938

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
Última edición por explorer el 2009-09-05 11:48 @533, editado 2 veces en total
Razón: Ortografía
JAPM
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2006-07-13 13:14 @593

Notapor explorer » 2006-07-15 04:42 @237

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor JAPM » 2006-07-20 15:37 @692

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.
JAPM
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2006-07-13 13:14 @593

Siguiente

Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado