CGI funktioniert nicht richtig
x-VieW
- perl
0 Daniel Thoma0 x-VieW0 Daniel Thoma0 x-VieW
0 Christian Kruse
0 MudGuard0 x-VieW
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
Hallo,
Hast Du die Rechte des Scripts richtig eingestellt?
Also üblicherwiese auf 755 bzw rwxr-xr-x
Grüße
Daniel
Hallo Daniel,
Was meinst du mit Rechte richtig eingestellt. Ich bin kein erfahrener Perl-Programmierer :)
Ich bitte um Erklärung
Gruss
x-VieW
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
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
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
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
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
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
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
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