x-VieW: CGI funktioniert nicht richtig

Hallo Leute,

Ich habe folgendes Problem:

Ich habe ein Formmailer CGI geschrieben, mit Hilfe von Rolf und Cheatah ==> Danke, aber funktioniert nicht ganz richtig!!!
Ich habe zu erst auf meinem Rechner ausprobiert, es ist gegangen, aber auf dem Rechner der Provider geht nicht's mehr?!?!?!

Ich kriege folgende Fhler:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, root@xxx.ch 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.
------------------------------------------------------------------
Apache/1.3.27 Server at www.xxx.ch Port 80

Ich habe Win2000Pro und Apache 2.0.43
Der Provider hat Unix-Rchner und Apache 1.3.27

Mein Script seht folgende massen aus:
------------------
#!/usr/bin/perl

use CGI ':standard';

use Net::SMTP;

$username  = param('name');
$uservname = param('vname');
$addstr    = param('str');
$addhnr    = param('hnr');
$addplz    = param('plz');
$addort    = param('ort');
$addland   = param('land');
$addtel    = param('tel');
$addfax    = param('fax');
$sender    = param('email');
$subj      = param('subject');
$text      = param('comment');

$mailServer  = 'smtp.xxx.ch';

$empfaenger  = 'info@xxx.ch';

$smtp = Net::SMTP->new($mailServer) or error("Keine Verbindung zu SMTP Host *$mailServer*");

my $message = <<"MSGTEXT";
From: $sender
To: $empfaenger
Subject: $subj
Name/ Vorname:  $username / $uservname
Strasse/ Nr.:         $addstr / $addhnr
PLZ/ Ort:             $addplz / $addort
Land:                   $addland
Tel.:                     $addtel
Fax:                     $addfax

Message:
$text
MSGTEXT

$smtp->mail($sender);
$smtp->to($empfaenger);
$smtp->data($message);
$smtp->quit;

print "Content-Type: text/html\n\n";
print << "END";
<HTML>
<HEAD>
<TITLE>Das ist ein Test</TITLE>
</HEAD>
<BODY bgcolor="#ffffff">
END

print "Die Mail wurde verschickt<BR>";

print << "END";
</BODY>
</HTML>
END
------------------------
Im Error.log steht folgendes:
[Sat Dec  7 15:43:30 2002] [error] [client 212.254.xxx.xxx] Premature end of script headers: /home/xxx.ch/cgi/mail.cgi

Ich habe mit ASCII-Modus transferiert.

Weiss jemand, wo könnte das problem legen????

Ich danke für eure Bemühungen im Voraus.

Gruss
x-VieW

  1. Hallo,

    Hast Du die Rechte des Scripts richtig eingestellt?
    Also üblicherwiese auf 755 bzw rwxr-xr-x

    Grüße

    Daniel

    1. Hallo Daniel,

      Was meinst du mit Rechte richtig eingestellt. Ich bin kein erfahrener Perl-Programmierer :)
      Ich bitte um Erklärung

      Gruss
      x-VieW

      1. Hallo x-VieW!

        Unter Unix werden ausführbare Dateien nicht an ihrer Endung erkannt, sondern an den Dateirechten.
        Wenn Du willst, dass ein CGI-Script ausführbar ist, musst Du also dagür sorgen, dass der Webserver die Rechte hat, es auszuführen.
        Guck mal, ob Dir Dein FTP-Programm die Möglichkeit bietet, die Rechte für eine Datei zu ändern.
        Stelle dann folgendes ein:
        Besitzer: lesen schreiben ausführen
        Gruppe: lesen ausführen
        Alle: lesen ausführen

        Falls Du das oktal angeben musst, wäre das 755.

        Grüße

        Daniel

        1. Hallo Daniel,
          Ich kann Die Dateien Löschen und neu kopieren auf dem Server. Aber Ich kann die Inhalte der Datein nicht dierekt auf dem Server manipulieren. Was normal ist.
          Ich danke dir und Gruss
          x-VieW

    2. Hallo Daniel,

      Hast Du die Rechte des Scripts richtig eingestellt?

      Die Fehlermeldung 'Premature end of script headers' laesst
      darauf schliessen, dass versucht wurde, das CGI-Script
      auszufuehren. Tatsaechlich wir der Fehler wohl woanders liegen.
      Ein

      use CGI::Carp qw/fatalsToBrowser/;

      wird wahrscheinlich mehr Aufschluss geben.

      Gruesse,
       CK

      1. Hallo,

        Die Fehlermeldung 'Premature end of script headers' laesst
        darauf schliessen, dass versucht wurde, das CGI-Script
        auszufuehren. Tatsaechlich wir der Fehler wohl woanders liegen.

        Ich habe es extra mal ausprobiert. Die Fehlermeldung wird auch ausgegeben, wenn die Datei nicht ausführbar ist.
        Seine Frage "Was meinst du mit Rechte richtig eingestellt?" bestätigt außerdem meine Vermutung, finde ich ;-)

        Grüße

        Daniel

        1. Hoi Daniel,

          Die Fehlermeldung 'Premature end of script headers'
          laesst darauf schliessen, dass versucht wurde, das
          CGI-Script auszufuehren. Tatsaechlich wir der Fehler
          wohl woanders liegen.
          Ich habe es extra mal ausprobiert. Die Fehlermeldung wird
          auch ausgegeben, wenn die Datei nicht ausführbar ist.

          Trying 192.168.0.3...
          Connected to rain.defunced.de.
          Escape character is '^]'.
          GET /cgi-bin/env.pl HTTP/1.1
          Host: rain.defunced.de
          Connection: close

          HTTP/1.1 403 Forbidden
          Date: Sat, 07 Dec 2002 17:29:02 GMT
          Server: Apache/1.3.27 (Unix) PHP/4.2.3 AuthMySQL/2.20
          Connection: close
          Transfer-Encoding: chunked
          Content-Type: text/html; charset=iso-8859-1

          Nicht wirklich.

          Seine Frage "Was meinst du mit Rechte richtig
          eingestellt?" bestätigt außerdem meine Vermutung, finde
          ich ;-)

          Du kennst 'umode'? :)

          Gruesse,
           CK

          1. Hallo Christian,

            Nicht wirklich.

            Hm, das Verhalten scheint da unterschiedlich zu sein, je nach dem ob man das Script in ein CGI-Verzeichnis stellt, oder ob man es Anhand der Endung mit Action ... ausführen lässt.

            Grüße

            Daniel

  2. Hi,

    $smtp = Net::SMTP->new($mailServer) or error("Keine Verbindung zu SMTP Host *$mailServer*");

    hier wird eine Ausgabe gemacht (nämlich die Fehlermeldung). Zu diesem Zeitpunkt hast Du noch keinen Header gesendet.
    Denn der header kommt erst hier:

    print "Content-Type: text/html\n\n";
    ...
    Im Error.log steht folgendes:
    [Sat Dec  7 15:43:30 2002] [error] [client 212.254.xxx.xxx] Premature end of script headers: /home/xxx.ch/cgi/mail.cgi

    Diese Meldung sagt es ja: Es erfolgte eine Ausgabe, bevor der Header geschickt wurde.

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    1. Hi Andreas,

      $smtp = Net::SMTP->new($mailServer) or error("Keine Verbindung zu SMTP Host *$mailServer*");

      hier wird eine Ausgabe gemacht (nämlich die Fehlermeldung). Zu diesem Zeitpunkt hast Du noch keinen Header gesendet.
      Denn der header kommt erst hier:

      print "Content-Type: text/html\n\n";
      ...
      Diese Meldung sagt es ja: Es erfolgte eine Ausgabe, bevor der Header geschickt wurde.

      Ich habe früher auch ohne den Test gestartet und trotzdem nicht gegangen.
      Ich hab's gerade so ausprobiert:
      $smtp = Net::SMTP->new($mailServer);
      Es geht immer noch nicht :(
      Danke für die Hilfe
      Gruss
      x-VieW