CaCO3: Counter-Script (kann keine Bilder ausgeben)

Hallo zusammen

ich habe folgendes Problem mit meinem selbstgeschriebenen cgi-counterscript:

wenn ich den counter von der adresszeile im browser aufrufe
(www.xxx.ch/cgi-bin/counter.cgi)
dann erstellt dieser einen html-code und gibt diesen im browser aus.
das ist alles ok, d.h. es funktioniert.

dazu verwendete ich folgenden code (vereinfacht):
-----------------------------------------------------------
#!/usr/bin/perl --

use CGI::Carp qw(fatalsToBrowser);
use Time::Local;
print "Content-type: text/html\n\n";

print "Unten ist ein Bild zu sehen:<br>";
print "<img src="/bilder/logo.gif">";

print "</body></html>\n";
--------------------------------------------------------

Problem:
ich will den counter in eine html-datei einbinden und mache das wie die meisten counter mit folgendem coude:
<IMG SRC="http://xxx.ch/cgi-bin/counter.cgi">

nun scheint dies leider nicht zu funktionieren (er stellt kein bild dar.

weis jemand, wo der bug ist?
wie gesagt, wenn ich den script von der adresszeile aufrufe, funktionirt es.
(es darf übrigens nicht SSi verwendet werden)

thanx for your helps CaCO3

  1. Aloha!

    wenn ich den counter von der adresszeile im browser aufrufe
    (www.xxx.ch/cgi-bin/counter.cgi)
    dann erstellt dieser einen html-code und gibt diesen im browser aus.
    das ist alles ok, d.h. es funktioniert.

    Problem:
    ich will den counter in eine html-datei einbinden und mache das wie die meisten counter mit folgendem coude:
    <IMG SRC="http://xxx.ch/cgi-bin/counter.cgi">

    nun scheint dies leider nicht zu funktionieren (er stellt kein bild dar.

    Ist ja auch logisch. Du gibst HTML-Code aus, zusammen mit dem Content-Type "text/html". Bilder bestehen aber nicht aus HTML-Code, sondern aus binären Bytes und dem Content-Type "image/*" (üblich sind "image/gif", "image/jpeg" und "image/png").

    Du mußt also erstens den korrekten Content-Type zurückliefern (benutze nicht IE zum Testen, ob dieser korrekt ist - der IE korrigiert die Angabe manuell, was nicht gut ist).

    Und zweitens mußt du die Bytes für ein Bild zurückliefern. Wahlweise kannst du auch einen Redirect auf das Bild zurückliefern, das wäre nur doppelt zeitaufwendig, weil der Browser dann nochmal Serverkontakt herstellen muß.

    - Sven Rautenberg

    1. Das erfordert aber einen komplizierten Code, da ich mal annehme, dass der Counter aus 10 Ziffern-Pics zusammengesetzt wird.

      Das einfachste wäre natürlich, das ganze über den <script>-Tag zu lösen.

      <script src="mein_prog.cgi"></script>

      und das Prog sieht dann so aus:

      #!/usr/bin/perl --

      use CGI::Carp qw(fatalsToBrowser);
      use Time::Local;
      print "Content-type: text/html\n\n";

      print "Unten ist ein Bild zu sehen:<br>";
      $pic="<img src="/bilder/logo.gif">";
      print "document.write('$pic')";
      print "</body></html>\n";