• Publicidad

Problemas con mi código CGI en hosting

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

Problemas con mi código CGI en hosting

Notapor liceva » 2011-05-29 22:13 @967

Tengo un problema al ejecutar la sig. ruta donde enlaza a un cgi (report.cgi):

http://www.liceva.mx/index.html.

Esta página es un ejemplo de reporte para un directorio, en donde
los campos pueden ser llenados con la información que sea y al momento
de dar clic en el botón de enviar, éste generará el reporte.
Pero no lo hace. Les expliqué esto a mi proveedor de la página y me
dice que aparece este log en Apache:

[Sat May 28 13:25:48 2011] [error] [client 189.186.146.76] Premature end of script headers: report.cgi, referer: http:liceva.mxindex.html

Es curioso, porque conseguí un host provisional en donde están los mismos archivos anteriormente citados, este es mi ejemplo:

http://liceva.dyndns.org/eva

y en este lugar corre perfectamente.

Ahora bien, necesito que me ayuden a encontrar la solución a mi problema ya que desconozco el porqué no se carga en mi host y mi proveedor dice que es por el código. En caso que sean los permisos de ellos, ¿qué es lo que tienen que ajustar?

Les agradeceré su apoyo.
liceva
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-05-29 22:01 @959

Publicidad

Re: Problemas con mi código CGI en hosting

Notapor explorer » 2011-05-30 03:25 @184

Bienvenido a los foros de Perl en español, liceva.

En el código aparece:

<form id="form1" name="form1" method="post" action= report.cgi>

Quizás deberías indicar la ruta hacia report.cgi. Es decir, si está colocado en el raíz del sitio, pon "/report.cgi". Si está dentro de la carpeta cgi-bin, pon "/cgi/report.cgi".

De todas maneras, el error indica que sí ha conseguido ejecutar el cgi. Indica que, al ejecutarlo, no ha encontrado en la respuesta la clásica cabecera HTTP, si no que ha encontrado algo distinto.

Es muy posible que el programa haya generado un aviso o un error, y sale antes del resto de la salida.

Te recomiendo que uses el módulo CGI::Carp para que el error salga en la pantalla del navegador. Mira en ejemplo en mi CGI mínimo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problemas con mi código CGI en hosting

Notapor liceva » 2011-05-30 10:01 @459

Gracias por su respuesta,
ya corrí el CGI mínimo en http://www.liceva.mx/cgi-bin/minimo.cgi
y corre sin problemas. Sin embargo, veo que usa una programación un poco distinta a la que acostumbro a hacer.

Aquí mi código de http://www.liceva.mx/cgi-bin/report.cgi:

# Analizar Variables Capturadas
#############################################################################################
print "Content-type: text/html\n\n";
use cgi;
$query = new CGI;
$n_nombre = $query->param("Nom_D");
$n_domicilio = $query->param("Dom_D");
$n_telefono = $query->param("Tel_D");

# Resultados en formato HTML
############################################################################################

# Validación
#############################################################################################
if ("$n_nombre" eq "")
{
print "Favor de llenar campo Nombre";
exit;
}

if ("$n_domicilio" eq "")
{
print "Favor de llenar campo Domicilio";
exit;
}

#
# Mensaje
#############################################################################################
$mensaje = "";
$mensaje .= "$n_nombre con domicilio <br>";
$mensaje .= "$n_domicilio<br>";
$mensaje .= "Telefono: $n_telefono";

print $mensaje;
exit;


Dígame si tengo algún problema con mi código, por favor.
liceva
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-05-29 22:01 @959

Re: Problemas con mi código CGI en hosting

Notapor explorer » 2011-05-30 10:13 @467

Si haces uso del módulo CGI, no es necesario que envíes "a mano" la cabecera "Content-Type". Si te fijas en el código del CGI mínimo, esa labor la realiza la función header().

Y también verás que las funciones que generan el código HTML son fáciles de ejecutar, gracias a que las hemos importado con la palabra ':standard' en el momento de importar el módulo CGI.

En principio, yo no veo errores, salvo cosillas (que no son errores), como por ejemplo poner

if ("$n_domicilio" eq "")

No es necesario entrecomillar algo que solo va a contener una variable. Es mejor poner:

if ($n_domicilio eq '')

Recuerda que puedes usar el módulo CGI::Carp para que los errores salgan en la ventana del navegador.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problemas con mi código CGI en hosting

Notapor liceva » 2011-05-30 10:42 @488

Gracias por su apoyo.

Entonces ¿¿tendré que cambiar algunos parámetros de mi programación??
Porque, ¿cuál es la diferencia de que mi código sí trabaje bien en un
host (http://www.liceva.dyndns.org/eva) y en otro no (http://www.liceva.mx)??

Ya que su forma de programar corre sin problemas en el host que
mis programas marcan errores al leer.
liceva
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-05-29 22:01 @959

Re: Problemas con mi código CGI en hosting

Notapor explorer » 2011-05-30 14:57 @664

No lo sabemos, sin más pistas.

¿Has probado el módulo CGI::Carp en tu programa?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problemas con mi código CGI en hosting

Notapor liceva » 2011-05-30 20:28 @894

Lo utilicé, agregándolo con los otros módulos, pero
no me manda ningun error de log.

Ahora si perdí la brújula.


#!/usr/bin/perl
use CGI qw(:standard );
use CGI::Carp qw(fatalsToBrowser);
use cgi;
$query = new CGI;
$n_nombre = $query->param("Nom_D");
$n_domicilio = $query->param("Dom_D");
$n_telefono = $query->param("Tel_D");

print
header,
start_html('CGI REPORT'),
h1('CGI REPORT'),
hr,
if ($n_nombre eq ")
{
hr,
p ('Favor de llenar campo Nombre'),
hr;
}

if ($n_domicilio eq ")
{
hr,
p ('Favor de llenar campo Domicilio'),
hr;
}
#
# Mensaje
#############################################################################################
$mensaje = "";
$mensaje .= "$n_nombre con domicilio <br>";
$mensaje .= "$n_domicilio<br>";
$mensaje .= "Telefono: $n_telefono";

print $mensaje;
exit;


Necesito que me ayude a comprender estas sintaxis que son
nuevas para mi. Agradezco su apoyo.
liceva
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-05-29 22:01 @959

Re: Problemas con mi código CGI en hosting

Notapor explorer » 2011-05-30 20:34 @898

Ya vi el problema...

El módulo cgi no existe... en realidad es CGI (en mayúsculas).

Quita la línea del 'use cgi;'. El verdadero módulo CGI lo estás cargando en la segunda línea del programa.

Otro detalle: estás mezclando las dos formas de usar el módulo CGI: funcional y la orientada a objetos. Es mejor que solo uses una de las dos.

Aparte, hay errores de programación muy graves (el programa no funcionará).

El programa quedaría así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use CGI       qw(:standard );
  3. use CGI::Carp qw(fatalsToBrowser);
  4.  
  5. $n_nombre    = param("Nom_D");
  6. $n_domicilio = param("Dom_D");
  7. $n_telefono  = param("Tel_D");
  8.  
  9. print
  10.     header,
  11.     start_html('CGI REPORT'),
  12.     h1('CGI REPORT'),
  13.     hr,
  14.     ;
  15.  
  16. if ($n_nombre eq '') {
  17.     print
  18.         hr,
  19.         p('Favor de llenar campo Nombre'),
  20.         hr,
  21.         ;
  22. }
  23.  
  24. if ($n_domicilio eq '') {
  25.     print
  26.         hr,
  27.         p('Favor de llenar campo Domicilio'),
  28.         hr,
  29.         ;
  30. }
  31.  
  32. #
  33. # Mensaje
  34. #############################################################################################
  35. $mensaje  = "$n_nombre con domicilio <br>";
  36. $mensaje .= "$n_domicilio<br>";
  37. $mensaje .= "Telefono: $n_telefono";
  38.  
  39. print $mensaje;
  40.  
  41. print end_html;
  42.  
  43. print "\n";
  44.  
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problemas con mi código CGI en hosting

Notapor liceva » 2011-05-30 21:00 @916

Aún así con el código corregido, no me quiere correr la aplicación en mi página.

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

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



El módulo use CGI::Carp qw(fatalsToBrowser); no muestra
ningún error del sistema. No puedo saber cuál es el problema.
liceva
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2011-05-29 22:01 @959

Re: Problemas con mi código CGI en hosting

Notapor explorer » 2011-05-30 21:15 @927

El error dice que en el error.log del servidor web hay más información de lo que ha ocurrido.

Antes de subir el programa al alojamiento que tienes contratado, puedes comprobar si la sintaxis del programa es correcta.

Haz un

perl -c code_26382.pl

desde la línea de comandos (cambiando code_26382.pl por el nombre de tu programa). Si Perl ve que todo está bien, saldrá un mensaje de Ok. Y si no, saldrá un error en pantalla.

También puedes probar a ejecutar el programa en tu propio ordenador:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@casa:~/Documentos/Desarrollo> perl code_26382.pl Nom_D=Joaquin Dom_D=Cascajares Tel_D=983441271
  2. Content-Type: text/html; charset=ISO-8859-1
  3.  
  4. <!DOCTYPE html
  5.         PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  6.          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  7. <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
  8. <head>
  9. <title>CGI REPORT</title>
  10. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  11. </head>
  12. <body>
  13. <h1>CGI REPORT</h1><hr />Joaquin con domicilio <br>Cascajares<br>Telefono: 983441271
  14. </body>
  15. </html>
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Observa que hemos pasado los argumentos en la propia línea de ejecución del programa, y el resultado sale perfecto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron