• Publicidad

Problema al mostrar imagen en Perl

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

Problema al mostrar imagen en Perl

Notapor eduardo777 » 2010-06-09 16:31 @730

Hola, tengo el siguiente problema: estoy haciendo un cgi en Perl el cual llama a una imagen con la instrucción:
print print "<img src='logo.gif'>";
no muestra nada más que una X, pero probando el mismo como HTML normal sí muestra la imagen. No sé qué pueda tener de malo.

Me podrían ayudar, por favor.
eduardo777
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2010-06-09 16:11 @716

Publicidad

Re: Problema al mostrar imagen en Perl

Notapor explorer » 2010-06-09 16:34 @732

Bienvenido a los foros de Perl en Español, eduardo777.

Creo que el problema es al poner dos veces 'print'.
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

Re: Problema al mostrar imagen en Perl

Notapor danimera » 2010-06-09 22:21 @973

Además del print() doble... verifica bien que la ruta de la imagen debe estar en el mismo directorio que el CGI.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Problema al mostrar imagen en Perl

Notapor eduardo777 » 2010-06-10 13:52 @619

danimera escribiste:Además del print() doble... verifica bien que la ruta de la imagen debe estar en el mismo directorio que el CGI.


Hola, disculpas. El doble print() fue error mio al mandar el mensaje. En el programa va solo con un print() y la ruta hacia la imagen está en el mismo directorio, o sea, en cgi-bin/; ahí se encuentran todos los archivos del programa y también el logo.gif.

Aquí envío parte del código.

Este es un archivo con extensión .pm (error.pm se encuentra dentro de c:/xampp/perl/lib)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub printError1{
  2.         local ($msg) = @_;
  3.         print "
  4.          <table width=\"400\" border=\"1\" align=\"center\" bgcolor=\"#FF9966\">
  5.     <tr>
  6.       <td><img src=\"logo.gif\" width=\"100\" height=\"66\"><b>Error:</b>&nbsp;$msg</td>
  7.     </tr>
  8.    </table>";
  9.          return;
  10. }
  11. 1;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Luego llamo a este archivo de la siguiente manera: (principal.pl)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!c:/xampp/perl/bin/perl.exe -w
  2. use CGI::Carp qw(fatalsToBrowser);
  3. use CGI qw(:standard);
  4. print "Content-type: text/html\n\n";
  5. use DBI;
  6. use error; #Aquí invoco error.pm
  7. # ...
  8. # ...
  9. if(!$mail){
  10.     &printError1("E-MAIL NO VALIDO");
  11. }
  12. # ...
  13. # ... Más líneas
  14. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo estoy utilizando para validar campos, todo el programa funciona correctamente, se muestra el mensaje de error en una tabla con color y todo, lo único que no sale es la imagen. En su lugar sale sólo una X.

Pero si hago correr este trozo de código como HTML normal la imagen se muestra correctamente.
eduardo777
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2010-06-09 16:11 @716

Re: Problema al mostrar imagen en Perl

Notapor explorer » 2010-06-10 14:21 @639

Haz lo siguiente:

* Ejecuta el CGI en un navegador, si es posible, en Firefox
* Una vez presentada la página, pulsa Control+I (o Herramientas->Información de la página)
* Saldrá la ventana con todas las características de la página
* Pulsa sobre el botón Medios. Se presentará un listado de todos los gráficos presentes en la página
* Allí debería aparecer el enlace a logo.gif.

Comprueba que Firefox te da la información, tamaño e incluso te presenta el logo.gif en la parte inferior. Si no lo hace, es que no ha podido cargar el gráfico, bien sea porque está roto o porque no lo ha encontrado en el servidor.

Revisa la URL que aparece en el listado de medios para ver si es correcta.

Si lo es, comprueba que logo.gif es legible por parte del usuario. Has dicho que está todo en el cgi-bin: comprueba que tiene activados los permisos de lectura. De todas maneras, has de saber que algunos servidores web intentan ejecutar todo aquello que cuelga de cgi-bin/ porque se supone que en esa carpeta solo debe haber programas. Si es eso, mueve el gráfico a otro directorio "más normal" para los gráficos.

Quien realmente te va a decir qué es lo que pasa es el fichero error.log de actividad del servidor web.

Otra cosa que puedes hacer: pulsa con el botón derecho sobre la X de la imagen, y pulsa la opción "Ver imagen". Así, el Firefox intentará mostrar solo esa imagen. Si no está en la caché, intentará bajarla de nuevo. Si hay problemas, Firefox te dará alguna pista.

No dejes de usar la Consola de errores de Firefox (Herramientas->Consola de errores). Si hay algún problema con la página, también saldrá ahí.

Se nota que Firefox da muchas más ayudas que otros navegadores :)

Con respecto al código que has mostrado, unos comentarios:
* Intercambia las posiciones de CGI y CGI::Carp
* No necesitas hacer el print() del Content-Type, pues eso ya lo hace la función header() de CGI. Mira mi CGI mínimo
* No necesitas, generalmente, usar '&' en las llamadas a las funciones
* En vez de local(), lo más seguro es que quisieras usar my() (que, realmente, crea variables locales)
* Escapar comillas dobles con código HTML... es un rollo... ¿verdad? :) Prueba con qq(), que hace lo mismo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub printError1 {
    my ($msg) = @_;
    print qq(
         <table width="400" border="1" align="center" bgcolor="#FF9966">
         <tr>
         <td><img src="logo.gif" width="100" height="66"><b>Error:</b>&nbsp;$msg</td>
         </tr>
         </table>);
    return;
}
Coloreado en 0.001 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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema al mostrar imagen en Perl

Notapor eduardo777 » 2010-06-11 17:40 @778

Hola, explorer.

Te agradezco por la ayuda, los tips que me diste sobre Firefox me sirvieron mucho para identificar el problema.

El problema era que la imagen estaba dentro del directorio cgi-bin/, lo que hice fue sacarla a otra ubicación como me indicaste, en mi caso al htdocs/ y ahora todo funciona correctamente. Gracias nuevamente y sigue adelante.
eduardo777
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2010-06-09 16:11 @716

Re: Problema al mostrar imagen en Perl

Notapor explorer » 2010-06-11 17:56 @789

Pues entonces a lo mejor, también, se resolvía de la forma más tonta: en lugar de poner 'logo.gif', cambiarlo por '/cgi-bin/logo.gif'.
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


Volver a Web

¿Quién está conectado?

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