Thorsten: Text-Basierter Zähler oder mit Grafik

Kann man einen Text-basierten zähler direkt in eine html-datei einbinden, d.h. dass das CGI-Skript beim Aufruf über ein <img>-Objekt direkt die Zahl zurückliefert und in der HTML-Datei ausgibt?? (wie zb document.write bei JavaScript)
Ich habe folgendes gecodet:
----------------------------
#!/usr/bin/perl

my $anzahl;

open (FILE, "+<zaehler.dat");
read(FILE, $anzahl, 100);
seek(FILE, 0, 0);
$anzahl++;
print FILE "$anzahl";
close(FILE);

print "Content-type: text/html\n\n";
print "$anzahl";
exit;
----------------------------
Das funktioniert aber nur beim direkten aufruf des Scripts. Was muss ich ändern, damit der Zählerstand in der aufgerufenen HTML-Datei an der Stelle mit dem <img> aufruf erscheint? (ohne SS-Includes)
Falls dies nicht möglich ist möchte ich eine Grafik zurückliefern.
Da ich den Counter nicht nur zum Zählen der Seitenbesuche sondern noch in anderen Scripten aufrufen möchte
kann ich kein existierendes Scipt verwenden bzw. möchte ich nicht.
Wie kann ich also beim Aufruf über das <img> objekt der zahl entsprechnde grafiken zuürckliefern??

  1. Hi,

    Kann man einen Text-basierten zähler direkt in eine html-datei einbinden, d.h. dass das CGI-Skript beim Aufruf über ein <img>-Objekt direkt die Zahl zurückliefert und in der HTML-Datei ausgibt?

    nicht der Zähler ist entscheidend, sondern die Einbindung. Ein <img> ist nun mal die Referenzierung einer Grafik.

    #!/usr/bin/perl

    perldoc strict
    perldoc perlrun (-w)

    read(FILE, $anzahl, 100);

    Huh?

    Was muss ich ändern, damit der Zählerstand in der aufgerufenen HTML-Datei an der Stelle mit dem <img> aufruf erscheint?

    Die Art der Einbindung.

    (ohne SS-Includes)

    Z.B. über SSI.

    Falls dies nicht möglich ist möchte ich eine Grafik zurückliefern.

    perldoc GD

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. hi,

    Kann man einen Text-basierten zähler direkt in eine html-datei einbinden, d.h. dass das CGI-Skript beim Aufruf über ein <img>-Objekt direkt die Zahl zurückliefert und in der HTML-Datei ausgibt??

    nein, natürlich nicht.
    bei <img> erwartet der browser die angabe einer ressource, die grafikdaten zurückgibt - oder er zeigt ein broken image.

    (wie zb document.write bei JavaScript)

    na da hast du doch schon eine lösungsmöglichkeit direkt vor der nase - erzeuge dynamisch ein javascript, dass sich als externe datei einbinden lässt, und die zahl ausgibt.

    btw: die aussage "counter sind doof!" hast du hoffentlich schon im archiv gefunden.

    gruss,
    wahsaga

    1. (wie zb document.write bei JavaScript)

      na da hast du doch schon eine lösungsmöglichkeit direkt vor der nase - erzeuge dynamisch ein javascript, dass sich als externe datei einbinden lässt, und die zahl ausgibt.

      Das ist die beste Lösung von ALLEN! Supa!!

      btw: die aussage "counter sind doof!" hast du hoffentlich schon im archiv gefunden.

      will damit ja nicht ein normalen Besucherzähler basteln da habe ich schon einen vorkonfigurierten dafür ;)

      1. Hi,

        will damit ja nicht ein normalen Besucherzähler basteln da habe ich schon einen vorkonfigurierten dafür ;)

        <Ironie>
        achso... du willst also was noch genialeres damit machen?! Cool! *g*
        </Ironie>

        übrigens stoßen auch und v.a. diese vorkonfigurierten Zähler auf zumindest geteiltes Echo :-)

        Viele Grüße,

        Jan

    2. willste wissen wie ich es gelöst hab?

      1. hi,

        willste wissen wie ich es gelöst hab?

        klar, das kannst du gerne hier posten, damit es anderen weiterhilft, die diesen thread später mal im archiv finden werden.

        gruss,
        wahsaga

        1. klar, das kannst du gerne hier posten, damit es anderen weiterhilft, die diesen thread später mal im archiv finden werden.

          ----------------------------
          #!/usr/bin/perl

          my $anzahl;
          open(FILE, "+<../zaehler.js");
          flock(FILE, 2);
          seek(FILE, 8, 0);
          read(FILE, $anzahl, 10);
          chop($anzahl);
          $anzahl++;
          seek(FILE, 0, 0);
          print FILE "var anz=$anzahl;";
          flock(FILE, 8);
          close(FILE);

          print "Content-type: text/html\n\n";
          print "$anzahl";
          exit;

          <script language="JavaScript" src="zaehler.js" type="text/javascript">
          </script>

          <script language="JavaScript" type="text/javascript">
          document.write(anz);
          </script>
          ----------------------------
          Die zaehler.js wird ein Verzeichnis höher erstellt, da man auf das cgi-bin Verz meist nur ausführenden Zugriff hat.
          Der flock Befehl verhindert einen mehrfachen Zugriff auf die Datei.
          Der chop Befehl entfernt Das Semikolon.
          Dann wird die zaehler.js in die HTML eingebunden und der Zählerstand schließlich mit dem document.write Befel ausgegeben.
          Die zaehler.js muss man vor der ersten Verwendung noch erstellen mit
          dem Inhalt "var anz=0;". (->chmod 666)
          Ausserdem müssen CGIs immer einen Rückgabe-Stream haben z.B. eine HTML-Ausgabe oder Weiterleitung.

          Ansonsten Viel Spass mit meiner Lösung!
          Thorsten

  3. Hallo Thorsten,

    Kann man einen Text-basierten zähler direkt in eine html-datei einbinden, d.h. dass das CGI-Skript beim Aufruf über ein <img>-Objekt direkt die Zahl zurückliefert und in der HTML-Datei ausgibt?

    Ja, das geht, aber nicht so:

    print "Content-type: text/html\n\n";
    print "$anzahl";

    Wenn ich dich richtig verstanden habe, willst du sowas machen: <img src="./cgi-bin/script.pl">. Damit das funktioniert, muss dein Script einen Header ausliefern, der einen für Grafiken zutreffenden Inhaltstypen enthält ("text/html" ist hier nicht richtig) und natürlich auch eine Grafik.

    Das funktioniert aber nur beim direkten aufruf des Scripts. Was muss ich ändern, damit der Zählerstand in der aufgerufenen HTML-Datei an der Stelle mit dem <img> aufruf erscheint? (ohne SS-Includes)

    Was ist gegen SSI einzuwenden? Du schließt den sinnvollsten Weg, dein Ziel zu erreichen, aus.

    Falls dies nicht möglich ist möchte ich eine Grafik zurückliefern.

    Siehe oben. Im übrigen steht die Lösung für dieses Problem im </archiv/>. Wenn du aus dem Zählerstand eine Grafik zusammensetzen möchtest, beschäftige dich - wie Cheatah es dir bereits empfohlen hat - mit GD:

    http://search.cpan.org/~lds/GD-2.11/GD.pm

    Vielleicht hilft's
    Torsten