Lars Gausler: Fehler im Scribt

Hallo zusammen!

Ich habe ein cgi scribt gebastelt und lasse es mir die ausgabe im borwser anzeigen.
unten links im ie sieht man ein kleins ausrufezeichen, hinter welchem sich folgende fehlerinformationen verbergen:

Zeile: 2
Zeichen: 63
Fehler: Nicht abgeschlossene zeichenfolgenkonstante
Code: 0
URL: ...

So, hier ein auszug aus dem scribt, es beginnt mit zeile 1:
---scribt---
#!/usr/local/bin/perl

use strict;
use cgi_lib;
use select_cfg;

#begin of code

print "<!DOCTYPE ...
---cut---

wie unschwer zu erkennen ist, steht nichts in zeile 2, ausser dem
steuerzeichen für new line dürfte sich da nix befinden.
Ich habe die Zeile auch schon gelöscht, aber die Meldung bleibt.

Das scribt wird über einen Apache 1.3.27 mit modssl auf einem Solaris 9 ausgeführt.
Die Ausgabe erfolgt auf einem ie5.0 auf nt4.

Hat jemand von euch eine Idee, woran dieser Fehler liegen könnte???

mfg

Lars

  1. Ich kann dir leider nicht helfen, aber schreib Scribt bitte mit P

  2. hallo,

    Ich habe ein cgi scribt gebastelt und lasse es mir die ausgabe im borwser anzeigen. unten links im ie sieht man ein kleins ausrufezeichen,

    Der Internet Explorer (übrigens jeder andere Browser auch) kann nur das interpretieren, was er an Informationen bekommt, also:

    Zeile: 2
    Zeichen: 63
    Fehler: Nicht abgeschlossene zeichenfolgenkonstante
    Code: 0
    URL: ...

    bezieht sich auf den im Browser abrufbaren "Quelltext", aber nicht auf dein Script.

    #!/usr/local/bin/perl
    use strict;
    use cgi_lib;
    use select_cfg;

    Das ist alles für den Webserver bzw. für den Interpreter interessant, der IE erhält diese Zeilen gar nicht, seine Fehlermeldung kann sich also auch nicht darauf beziehen.

    print "<!DOCTYPE ...

    Genau an der Stelle, die du nicht mehr für mitteilenswert hältst, beginnt das, was deinem Browser nicht gefällt. Aber du hast leider nur Zeile 1 geliefert, in der nächsten Zeile steckt dann der "Fehler".
    Außerdem: wenn dein Script für die Ausgabe von HTML verantwortlich sein soll, muß _vor_ einer Zeile mit ' print "<!Doctype ..." ' noch die Anweisung stehen:
      print "Content-Type: text/html";

    Grüße aus Berlin

    Christoph S.

    1. print "<!DOCTYPE ...
      Genau an der Stelle, die du nicht mehr für mitteilenswert hältst, beginnt das, was deinem Browser nicht gefällt. Aber du hast leider nur Zeile 1 geliefert, in der nächsten Zeile steckt dann der "Fehler".
      Außerdem: wenn dein Script für die Ausgabe von HTML verantwortlich sein soll, muß _vor_ einer Zeile mit ' print "<!Doctype ..." ' noch die Anweisung stehen:
        print "Content-Type: text/html";

      Hi!

      Danke für deine schnelle Antwort.
      Hier nochmal mehr vom script, das mit dem print stand drin, hatte ich nur irgendwie nicht reinkopiert...

      ---begin---
      #!/usr/local/bin/perl

      use strict;
      use cgi_lib;
      use select_cfg;

      #filename:     host_operations.cgi
      #Version:      1.3
      #Author:       Lars
      #last change:  05082k3

      print "Content-Type: text/html\n\n";

      print "<!DOCTYPE HTML "-//W3C//DTD HTML 4.01 Transitional//EN">\n";
      print "<html><head><title>host information</title></head><body>\n";
      print "<link rel='stylesheet' type='text/css' href='/link.css'>";

      #used variables

      my $hostname;
      my $retval1;
      my $retval2;
      my $fail=0;
      my $help;
      my %postdata;

      #begin of code
      ---end---

      Was ist daran noch falsch, hast Du eine Idee???

      Ich danke Dir.

      mfg

      Lars

      1. Hallo Lars,

        print "<!DOCTYPE HTML "-//W3C//DTD HTML 4.01 Transitional//EN">\n";

        ------------------------^^^
        Hier ist der String zuende. Verwende einfache Anführungszeichen:
        print '...';

        Grüße
        Andreas

        --
        Hier könnte Ihre Werbung stehen.
        1. hallo Andreas,

          print "<!DOCTYPE HTML "-//W3C//DTD HTML 4.01 Transitional//EN">\n";
          ------------------------^^^
          Hier ist der String zuende.

          Nein. Mit dem davorstehenden Backslash werden die Anführungszeichen maskiert. Das ist völlig korrekt so.

          Verwende einfache Anführungszeichen:
          print '...';

          Ist an dieser Stelle nicht nötig.

          Grüße aus Berlin

          Christoph S.

          1. Hallo Christoph,

            Nein. Mit dem davorstehenden Backslash werden die Anführungszeichen maskiert. Das ist völlig korrekt so.

            Wie konnte ich das übersehen? Muß wohl an der Hitze liegen.

            Grüße
            Andreas

            --
            Hier könnte Ihre Werbung stehen.
      2. hallo,

        print "Content-Type: text/html\n\n";
        print "<!DOCTYPE HTML "-//W3C//DTD HTML 4.01 Transitional//EN">\n";
        print "<html><head><title>host information</title></head><body>\n";
        print "<link rel='stylesheet' type='text/css' href='/link.css'>";
        Was ist daran noch falsch, hast Du eine Idee???

        Daran ist zumindest auf den ersten Blick nichts falsch. Du könntest die DOCTYPE-Zeile noch in dieser Form vervollständigen:
         <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        Und ich würde auch zur besseren Lesbarkeit die dritte Zeile mit
         ...link.css'>\n";
        abschließen.
        Aber: ich habe dir bereits gesagt, verantwortlich für die Fehlermeldung ist das, was beim Browser ankommt. Du mußt also überprüfen, ob dein Browser denn das bekommt, was du ihm als HTML zukommen lassen möchtest. Schau bitte mal _dort_ nach, und vergleiche dann mit deinem Script.

        Dein Browser scheint das, was in deinem Script noch richtig steht, nicht bzw. nicht richtig zu erhalten, aber dazu mußt du eben nachschauen, was er tatsächlich bekommt, und nicht, was er bekommen soll.

        Grüße aus Berlin

        Christoph S.