Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » Problemas con mi código CGI en hosting Responder al tema
Nuevo tema


Página 1 de 2  [ 19 mensajes ]  Ir a página 1, 2  Siguiente
 
Nota 2011-05-29 22:13 @967

Perlero Nuevo
Registrado: 2011-05-29 22:01 @959
Mensajes: 6
Problemas con mi código CGI en hosting
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.


Nota 2011-05-30 03:25 @184
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10271
Re: Problemas con mi código CGI en hosting
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


Nota 2011-05-30 10:01 @459

Perlero Nuevo
Registrado: 2011-05-29 22:01 @959
Mensajes: 6
Re: Problemas con mi código CGI en hosting
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.


Nota 2011-05-30 10:13 @467
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10271
Re: Problemas con mi código CGI en hosting
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


Nota 2011-05-30 10:42 @488

Perlero Nuevo
Registrado: 2011-05-29 22:01 @959
Mensajes: 6
Re: Problemas con mi código CGI en hosting
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.


Nota 2011-05-30 14:57 @664
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10271
Re: Problemas con mi código CGI en hosting
No lo sabemos, sin más pistas.

¿Has probado el módulo CGI::Carp en tu programa?

_________________
JF^D Perl programming


Nota 2011-05-30 20:28 @894

Perlero Nuevo
Registrado: 2011-05-29 22:01 @959
Mensajes: 6
Re: Problemas con mi código CGI en hosting
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.


Nota 2011-05-30 20:34 @898
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10271
Re: Problemas con mi código CGI en hosting
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í:

Syntax: [ Download ] [ Hide ]
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.  

_________________
JF^D Perl programming


Nota 2011-05-30 21:00 @916

Perlero Nuevo
Registrado: 2011-05-29 22:01 @959
Mensajes: 6
Re: Problemas con mi código CGI en hosting
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.


Nota 2011-05-30 21:15 @927
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10271
Re: Problemas con mi código CGI en hosting
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:
Syntax: [ Download ] [ Hide ]
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>
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


Nota 2011-05-30 22:16 @970

Perlero Nuevo
Registrado: 2011-05-29 22:01 @959
Mensajes: 6
Re: Problemas con mi código CGI en hosting
Ya corrió mi cgi ¡Yupiiiiii!

Si quiere comprobarlo para que vea qué bonito se
ve...

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


Nota 2011-07-21 20:32 @897

Perlero Nuevo
Registrado: 2009-08-06 15:13 @675
Mensajes: 26
Re: Problemas con mi código CGI en hosting
Hola buenas noches.

Mi pregunta ronda en torno a las pequeñas diferencias entre correr tus cgi en un servidor local y hacerlo en un hosting.

El tema es que estoy por contratar un servicio de hosting y me parece muy bueno el servicio y con precio acorde, puedo instalar yo mismo los módulos de Perl y manejar un par de cosas más. Esta gente me dio un mes para testear si era lo que realmente necesitaba, pero cuando quise migrar las páginas ya hechas y probadas localmente surgieron errores, pequeños, quizás alguna comilla u otra tontería y me falta todavía solucionar un pequeño inconveniente que pude reducir hasta inferir que se centra en la asignación que hace el módulo HTML::TagParser a un array de los tags en cuestión.

Sin más preámbulos.

my $html = HTML::TagParser->new($url);
my @img = $html->getElementsByTagName("img");
my @p = $html->getElementsByTagName("p");

Al imprimir por pantalla $html, me tira "HTML::TagParser=HASH(0x9448218)".

Los valores de @img y @p son -1.

¿Alguno tiene alguna idea?, porque a mi ya se me acabaron.

Gracias.


Nota 2011-07-22 06:26 @310
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10271
Re: Problemas con mi código CGI en hosting
Hace falta algo más de código. Yo veo que está bien lo que está escrito, pero me gustaría ver cómo sacas los valores de @img.

_________________
JF^D Perl programming


Nota 2011-07-22 08:25 @392

Perlero Nuevo
Registrado: 2009-08-06 15:13 @675
Mensajes: 26
Re: Problemas con mi código CGI en hosting
Buenos días, explorer, gracias por la prontitud en tu respuesta, como siempre.
Este es el código que extrae los valores del @img:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1.         my $html = HTML::TagParser->new($url);
  2.         my @img  = $html->getElementsByTagName("img");
  3.         my @p    = $html->getElementsByTagName("p");
  4.  
  5.         foreach my $elem1 (@img) {
  6.             my $attr1 = $elem1->attributes;
  7.  
  8.             foreach my $key ( sort keys %$attr1 ) {
  9.                 if ( $key eq "height" && $attr1->{$key} == 100 ) {
  10.                     if ( $attr1->{src} =~ m/$filtro/g ) {
  11.                         push( @src, $attr1->{src} );
  12.                         push( @alt, $attr1->{alt} );
  13.                     }
  14.                 }
  15.             }
  16.         }
  17.  
  18.         foreach my $elem2 (@p) {
  19.             my $attr2 = $elem2->attributes;
  20.             my $text2 = $elem2->innerText;
  21.  
  22.             foreach my $key ( sort keys %$attr2 ) {
  23.                 if ( $attr2->{$key} eq "product_price" ) {
  24.                     $text2 =~ s/\$//g;
  25.                     $text2 =~ s/(.+\..+)Now (.+\..+)/$2/g;
  26.                     my $inc = ( $text2 / 100 ) * $GANANCIA;
  27.                     $valor_final = $text2 + $inc;
  28.                     $valor_final = sprintf( "%.2f", $valor_final );
  29.                     push( @txt, $valor_final );
  30.                 }
  31.             }
  32.         }
  33.  


Por favor no te fijes en la elegancia, todavía es una prueba. :roll:
Gracias de antemano.


Nota 2011-07-22 11:15 @510
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10271
Re: Problemas con mi código CGI en hosting
Sí que puede haber diferencias de ejecución entre hacerlo en local y hacerlo en un alojamiento externo: las bibliotecas y módulos pueden ser de versiones distintas, con lo que el comportamiento y errores no corregidos pueden dar lugar a esos diferentes comportamientos.

En cuanto al código que muestras, no lo he probado, pero me parece que está bien.

Dices que te funciona en local, pero no en el alojamiento. Si es un CGI, supongo que habrás puesto las líneas para sacar la cabecera HTTP antes de la salida normal.

_________________
JF^D Perl programming


Responder al tema  [ 19 mensajes ]  Ir a página 1, 2  Siguiente

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO