Bevan: Was ist an dieser Datei falsch?

HI,

--------------------------------

#!usr/bin/perl

$daten = <STDIN>;
%daten = &CGIDatenaufbereiter ($daten);
print "Content-type: text/html\n\n";
print '<html>';
print '<head>';
print '<title>Antwortseite</title>';
print '</head>';
print '<body>';
print '<hr>';
while ( ($temp, $wert) = each %daten )
{
  print "$wert<br>";
  $temp = 0;
}
print '<hr>';
print '</body>';
print '</html>';

sub CGIDatenaufbereiter
{
  local ($cgidatenskalar, $name, $daten);
  local @cgidatenliste;
  local %cgidatenhash;
  if ( $_[0] )
  {
    $cgidatenskalar = $_[0];
  }
  else
  {
    print STDERR "Es wurden keine Daten an den CGIDatenaufbereiter übergeben\n";
  }
  @cgidatenliste = split(/[&;]/ , $cgidatenskalar);
  foreach $listeneintrag (@cgidatenliste)
  {
    $listeneintrag =~ s/+/ /go;
    ($name, $daten) = split( /=/ , $listeneintrag );
    $name =~ s/%(..)/pack("c",hex($1))/ge;
    $daten =~ s/%(..)/pack("c",hex($1))/ge;
    $cgidatenhash{$name} = $daten;
  }
  return %cgidatenhash;
}

-----------------------------------------

Die Datei hat in der ersten Zeile den korrekten Pfad und läuft lokal und auf www.tripod.com. Bei HostEurope läuft es leider nicht und da ich eigentlich weiß, dass die Datei fehlerfrei ist habe ich eine Mail an das Support-Team geschickt.

Die Antwort:

------------------------------------------------

Sehr geehrter Kunde,

hier ein Auszug aus dem ErrorLog:

[Mon Jun 17 11:29:26 2002] [error] (2)No such file or directory: exec of /is/htdocs/32148/www.young-forum.de//cgi-bin/website.pl failed
[Mon Jun 17 11:29:26 2002] [error] [client 192.168.70.252] Premature end of script headers: /is/htdocs/32148/www.young-forum.de//cgi-bin/website.pl

Ihr Script sendet also keinen korrekten HTML Header.

Mit freundlichen Gruessen

Eric Drissler

ServiceCenter
Host Europe GmbH

-------------------------------------------------

Aber ich frage mich: Was ist an dieser Datei falsch ???
http://www.young-forum.de/website.html funktioniert nicht
http://www.tripod.com/homepagehaber0/website.html funktioniert
Die gleichen Dateien - nur die Erste Zeile jeweils angepasst.

MFG, Bevan

  1. Hi,

    #!usr/bin/perl

    erstens "...perl -w", zweitens gibt es vermutlich kein "/is/htdocs/32148/www.young-forum.de//cgi-bin/usr/bin/perl". Ein fehlender Slash kann fatal sein :-)

    Drittens:

    use strict;

    Hiernach wirst Du erst mal diverse Fehler gemeldet bekommen, die Du beheben darfst. Beispielsweise:

    $daten = <STDIN>;

    my $daten = ...

    %daten = &CGIDatenaufbereiter ($daten);

    Yiargh. Nope. Lies

    perldoc CGI

    und baue Dein Script anschließend sinnvoll auf.

    Die Datei hat in der ersten Zeile den korrekten Pfad

    Garantiert nicht :-)

    Cheatah

    1. UPPSSS,
      Big THX für die Hilfe auf diese dumme Frage. Habe mich wohl doch irgendwie in der ersten Zeile vertan *grmbl*. Naja jetzt funktioniert es jedenfalls :D

      Also nochmal Danke,
      Bevan

      1. Hallo,

        Naja jetzt funktioniert es jedenfalls :D

        Um es korrekter auszudrücken, jetzt kommen die von Dir genannten Fehler gerade nicht vor.

        Ich würde an Deiner Stelle doch eher noch einmal entsprechend der Hinweise von Cheatah das ganze Script überarbeiten, da es so wie es ist ein Sack voller Flöhe (äh Wanzen) ist, die nur auf einen geeigneten Zeitpunkt warten, den größtmöglichen Schaden anzurichten.

        Grüße
          Klaus

        1. HI,
          Das Script ist ja nicht sinnvoll oder irgendwas anderes, sondern ich habe es einfach nur gemacht, damit ich perl mal testen kann. aber warzum variablen mit my deklarieren? das bewirkt doch nur einschrängungen!

          MSG, Bevan

          1. Hallo,

            Das Script ist ja nicht sinnvoll oder irgendwas anderes, sondern ich habe es einfach nur gemacht, damit ich perl mal testen kann.

            Dann solltest Du aber bedenken, daß es wirklich wichtig ist, gleich von Beginn an sich zu einem sauberen Stil zu gewöhnen. Je eher das quasi in Fleisch und Blut übergeht, desto einfacher wird es später.

            aber warzum variablen mit my deklarieren? das bewirkt doch nur einschrängungen!

            Die einzige 'Einschränkung' ist es, daß Du sämtliche Variablen vor (bzw. bei) dem ersten Gebrauch mit my deklarierst. Damit 'sagst' du dem Interpreter 'Ich werde jetzt eine Variable verwenden, und die heißt $soundso, und ja, ich weiß was ich mache'. Solltest Du später z.B. durch einen Tipfehler die Variable $sowieso verwenden, dann wird dich der Interpreter mit einer entsprechenden Fehlermeldung darauf hinweisen.

            Ein weiterer Vorteil von my ist, daß Du damit auch die Gültigkeit von Variablen festlegst. So 'leben' mit my deklarierte Variablen nur so lange, wie der aktuelle Ausführungsblock (also entweder das Script/Modul oder irgendwas zwischen geschwungenen Klammern) dauert. Damit können sehr gut Seiteneffekte vermieden werden, die Dir sonst vielleicht Tage der Suche kosten würden.

            Das sind sicherlich nicht die einzigen Gründe, my zu verwenden, aber für den Anfang die naheliegendsten.

            Daher nochmals: Verwende 'use strict' mit 'my', schalte die Warnungen ein '#!/pfad/zu/perl -w' und (im Web/CGI-Umfeld) verwende 'use CGI;' anstelle irgendwelcher obskuren selbstgeschnitzen Routinen.

            Sich darauf umzustellen dauert, wenn's hoch kommt, vielleicht einen Tag. Einen Fehler aus oben genannten Gründen nicht suchen zu müssen, kann das locker amortisieren.

            Grüße
              Klaus