Hallo, apache/cgi/perl will nicht ein einfaches gif ausgeben: c2.pl: #!/usr/bin/perl print "Content-Type: image/gif\n\n"; system("cat images/n.gif"); Mit http://localhost/cgi-welker/c2.pl Es kommt immer die Fehlermeldung: Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. vom apache. Das cgi-Verzeichnis ist beim apache angegeben. Ein perl-Skript, das nur Text erzeugt und im gleichen Verzeichnis steht, funktioniert. Wenn im Skript vollständige Pfade für cat und das gif angegeben werden, tritt der Fehler ebenso auf. /var/log/httpd.error_log und ..access_log existieren, sind aber leer. In /var/log/messages steht auch nichts dazu. Jemand eine Idee? Suse 6.4/ 2.2.14/ apache-1.3.12 thx Ekkard
Ralph Müller schrieb am Sonntag den 08. Juli 2001:
Ich glaube /usr/X11R6/bin/xv schafft es Bilder anzuzeigen.
Wie schaffst Du es, daß xv ein "Content-Type: image/irgendwas\n\n" erzeugt und das Ganze auch noch nach STDOUT ausgibt, wo es IMHO jeder httpd braucht? Gruß Jens -- .. may the Tux be with you! #130250
Moin, Du willst über CGi ein Bild ausgeben? Wieso sendest Du nicht eine HTML Seite, eben mit dem "img" Tag. -------------schnipp ---------------------- #!/usr/bin/perl -w use CGI qw(:all); print header; print start_html; print img {src=>'DeinBild.gif', align=>'LEFT'}; print end_html; -------------------------------------------- Achtung untested... Ciao Andre Ansonsten gibt es noch ein Perl Modul namens GD.pm... Ciao Andre
Hallo, On Mon, 09 Jul 2001 at 00:55 (+0200), Andre Heine wrote:
Du willst über CGi ein Bild ausgeben?
Wieso sendest Du nicht eine HTML Seite, eben mit dem "img" Tag.
-------------schnipp ---------------------- #!/usr/bin/perl -w use CGI qw(:all);
^^^^^^ Nun mal nicht übertreiben. qw(:standard) dürfte auch reichen.
print header;
print start_html; print img {src=>'DeinBild.gif', align=>'LEFT'}; print end_html; --------------------------------------------
Achtung untested...
Kommt drauf an, was man will. Ich hätte noch eine dritte Lösung,
indem mal per HTTP umleitet:
#!/usr/bin/perl -w
print <
Ekkard Gerlach schrieb am Sonntag den 08. Juli 2001:
#!/usr/bin/perl print "Content-Type: image/gif\n\n"; system("cat images/n.gif");
Mit http://localhost/cgi-welker/c2.pl
Es kommt immer die Fehlermeldung:
Internal Server Error
Versuch mal, Dein Script "zu Fuß" auszuprobieren. Evtl. mit "c2.pl | less". Dann wirst Du sehen, daß die Ausgaben von cat und print durcheinanderkommen. Setze vor das print noch ein "$| = 1;", dann erfolgt die Ausgabe ungepuffert. Gruß Jens -- .. may the Tux be with you! #130250
Hallo, Jens Tautenhahn schrieb:
Ekkard Gerlach schrieb am Sonntag den 08. Juli 2001:
#!/usr/bin/perl print "Content-Type: image/gif\n\n"; system("cat images/n.gif");
ouch ein system aufruf ... (startet JEDESMAl einen neuen prozess (fork exec .... --> fress zeit ...)) IMHO viel schoener ist es das bild zeichenweise einzulesen und auszugeben z.B.: -.-.-.-.- schnipp .-.-.-.-.-. open(GIFDATEI, "<$gif_path") || die $gif_path." nicht gefunden !! \n"; while(($AktuellesZeichen = getc(GIFDATEI)) ne "") { print $AktuellesZeichen } close(GIFDATEI); ^.^.^.^ schnapp ^.^.^.^. das zeichenweise auslesen erreicht man mit getc(). hier wird orginalgetreu das wiedergegeben, was in der Datei steht. Vergleichsoperator fuer die abbruch bedingung ist ""
Internal Server Error
Versuch mal, Dein Script "zu Fuß" auszuprobieren. Evtl. mit "c2.pl | less". Dann wirst Du sehen, daß die Ausgaben von cat und print durcheinanderkommen. Setze vor das print noch ein "$| = 1;", dann erfolgt die Ausgabe ungepuffert.
den kannte ich noch nicht :-) Leider funktionert das mit konsolen stdout nicht mehr so recht wenn man typisierte dateien oder im allgemeinen textdateien darauf ausgibt. - manchmal muss dann ein "reset" alles wieder ins rechte lot bringen ... Zeichen 0x07 ist auch immer beliebt :-)))) mfg Thomas P.S.: die entwicklung von Perl soll ja nu eingestellt werden, da keine sonderzeichen mehr zur verfuegung stehen. ;;;-))) vieleicht aendert sich das ja mit Unicode ;;;;;;;-))))))))) -- Thomas Schmidt || t.schmidt@sh-home.de http://www.md-network.de/ || registered LINUX user No.: 171016 ======================================================================= -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/U d-(?) s:@ a-- C++ UL++>(++++)>$ P++(++++)>$ L++>(++++) E W- N++ o K- w O M- V- PS+ PE++ Y+ PGP t 5 X+ R tv++ b++ DI-- D+ G++ e* h* r-- y? ------END GEEK CODE BLOCK------
Hallo Jens, * Jens Tautenhahn schrieb:
Versuch mal, Dein Script "zu Fuß" auszuprobieren. Evtl. mit "c2.pl | less". Dann wirst Du sehen, daß die Ausgaben von cat und print durcheinanderkommen. Setze vor das print noch ein "$| = 1;", dann
stimmt!
erfolgt die Ausgabe ungepuffert.
Mit $| = 1; voran geht's !!! Hurrah ! Ich verstehe die Zeile zwar nicht, aber es geht schon mal. Apropos: error_log : es ist DOCH da, nämlich in /var/log/httpd/ . Die Phantome in /var/log/ , nämlich httpd.error_log und httpd.access.log haben mich von der weiteren Suche abgelenkt ! Der Fehler bei meinem bisherigen Skript: [Sun Jul 8 21:01:04 2001] [error] [client 127.0.0.1] malformed header from script. Bad header=GIF89av: /home/gerlach/web/welker/cgi-bin/c2.pl xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx okay soweit. Eine weitere Variante wurde mir angeboten: #!/usr/bin/perl -w use CGI qw(:standard); print header("image/gif"); open (BILD, "images/n.gif"); while (<BILD>) { print; } close BILD; Hier erscheint nur das leere Bild als Symbol und eine Meldung: "Document contains no data" Die Meldung in error_log: Read on closed filehandle <BILD> at /home/gerlach/web/welker/cgi-bin/c4.pl line 6. Muß da noch ein "while not EOF(<BILD>) " hin oder so ? thx Ekkard
participants (6)
-
Andre Heine
-
Bernhard Walle
-
Ekkard Gerlach
-
Jens Tautenhahn
-
Ralph Müller
-
Thomas Schmidt