Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Anfängerprobleme !





Frage

Hallo support'ler, ich habe wie es aussieht ein kleines Anfänger-Problem mit Perl. Bin dabei gerade ein bisschen was über Perl zu lernen, nur funktioniert einiges nicht so wie es soll. Als Server hab ich Sambar 6.0 mit ActivePerl 5.8... Folgendes Problem: Von einem HTML Dokument aus, soll ein Text an das Perl-Dokument übergeben, bearbeitet und dann wieder als HTML-Dokument ausgegeben werden. Wenn ich nun die Texteingabe tätige und auf Absenden drücke wird zwar das Perl-Script laut Adressleiste aufgerufen, allerdings bekomme ich von Sambar im Browserfenster nur die Meldung "internal Server Error". In den Serverlogs steht auch nur, das ein CGI-Script nicht ausgeführt werden konnte. Woran ich jetzt scheitere ist, dass andere Perl-Scripte wie die dumpenv.pl oder standard-Beispiele "Hallo-Welt" usw. funktionieren. Nur bei Variablen-Übergabe funktioniert das nicht. in der Config von Sambar wurde natürlich der Pfad zu Perl angegeben. Das PerlScript befindet sich auch im cgi-bin Verzeichnis und das HTML-File im docs. Andere Sambar Versionen habe ich auch schon probiert, daran liegts nicht. P.S. Bitte keine Vorschläge wie "verwende doch Apache" usw. Ich mache das über eine Fernschule und da ist Sambar mit Active-Perl gefordert. Wäre dankbar für jeden Tipp. Falls ihrs braucht, kann ich auch noch die Codes der beiden Files hier posten.

Antwort 1 von semi

Wahrscheinlich hast Du vergessen den Response-Header auszugeben.
Füge folgendes am Anfang des Skriptes ein.
print "Content-type: text/html\n\n";
Wichtig ist dabei, dass diese Anweisung vor allen anderen Ausgaben erfolgt.

Gruß,
Michael

Antwort 2 von semi

Übrigens, es kann auch an Syntaxfehlern liegen.
Jage es mal durch den Syntaxcheck von Perl.

perl -c skript.pl


Antwort 3 von Pinky

Ich kann mir nicht vorstellen, das im Perl Script selber der Fehler liegt, weil dieses ja von der Schule kommt. Trotzdem hier mal das Script:

#!/usr/bin/perl
# Das Script Hallo.pl
######################################################################
# Formularinhalt holen

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);

# + Zeichen in Leerzeichen umwandeln und alle ASCII-Steuerzeichen
# beginnend mit % umwandeln.

$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

$FORM{$name} = $value;

$gast = "$FORM{'fullname'}";

print "Content-type: text/html\n\n";
print qq|
<HTML>
<HEAD>
<TITLE>Ausgabe</TITLE>
</HEAD>
<BODY>
<center>
<font face=\"Arial\" size=2>Hallo, $gast</font>\n";
</center>
</BODY>
</HTML>
|;
exit;

}

Im HTML-File gibts eigentlich nur eine wichtige Zeile:
<FORM ACTION="http://localhost/cgi-bin/hallo.pl" METHOD="POST">

Dann kommt nur ein kleines Textfeld mit Absende-Button.


Antwort 4 von semi

Alle anderen Skripte Laufen einwandfrei?

Ein Fehler fällt mir auf, wird aber nicht die Ursache für den Serverfehler sein. (Siehe Zeile mit font...)
So sollte es aussehen:
<font face="Arial" size=2>Hallo, $gast</font>

Ein internal Server Error (Errorcode: 500) kommt i.d.R. wenn perl nicht gestartet werden kann oder wenn das Skript keinen Header generiert.

Wie sieht es aus mit den Zugriffsrechten auf das cgi-bin Verzeichnis und auf das Skript?
Ist Perl bei Dir in /usr/bin/ (which perl auf der Console eingeben)
Mit dem Server Sambar kann ich leider nicht viel Anfangen.

Gruß,
Michael

Antwort 5 von Pinky

Ok, mit der Zeile hast du recht. Hab mittlerweile von Seiten der Schule auch schon eine Korrektur gefunden. Deswegen funktionierts aber immer noch nicht.

Zugriffsrechte sind doch relativ, ich mach das ja auf einem Lokalen Server, nicht auf einem Webserver. Schreibschutz usw. ist raus.

Das Original-Perl von Sabar ist im /usr/bin/-Verzeichnis, allerdings ist das eine Alte Version. Ich hab Active Perl installiert und verweise Sambar auf diese Perl.exe.

Da ich jetzt natürlich ständig rumprobiere bin ich noch auf ein anderes Phänomen gestossen, vielleicht hängt das ja auch damit zusammen:
Im Sambar Server kann ich CGI-Extensions für das cgi-bin und win-cgi Verzeichnis vorgeben. (also z.B. *.cgi *.pl *.exe). Wenn ich das aber eintrage läuft überhaupt kein pl-Script mehr (Internal System Error).

Langsam bin ich echt am Verzweifeln.

Antwort 6 von semi

Hee?!? Sehe ich da etwa Perl.exe? :-)
Warum sagst Du nicht gleich, dass es unter Windoof ausgeführt wird?
Unter Windows muß die erste Zeile im Skript wie folgt aussehen

#! \pfad\zu\perl\bin\perl.exe

Achte darauf, dass das Leerzeichen zwischen ! und der Pfadangabe vorhanden ist. Außerdem verwende Backslash in Pfadangaben.
Falls der Server auf einem anderen Laufwerk installiert ist als ActivePerl, dann mußt Du noch den Laufwerksbuchstaben davor setzen.
z.B.

#! d:\pfad\zu\perl\bin\perl.exe

Jetzt aber :-)

Gruß,
Michael


Antwort 7 von Pinky

Also ich hab ja gelernt, dass die sh-bang-Zeile unter Windows entfallen kann, weil sie nur für Unix-Systeme von Bedeutung ist. Trotz alledem hab ich das natürlich schon ausprobiert, leider ohne Erfolg.

Ich kann wie du oben beschreibst auf die Active-Perl exe oder auch auf die Sambar-eigene Perl.exe verweisen.
Es bringt alles nichts.

Ausserdem funktionieren ja andere Perl Scripte wie z.B. dumpenv.pl. Also kanns ja eigentlich nicht an den Pfadangaben liegen.

Ich blicks langsam echt nicht mehr.


Antwort 8 von semi

Versuche mal die GET Methode.

$buffer = $ENV{'QUERY_STRING'};
...
# Rest des Skriptes
Vergiss nicht auch im Formular method="get" einzustellen.
Wie ich schon schrieb, den Sambar Server kenne ich nicht.
Der Fehler kann viele Ursachen haben.

  1. Der Server kriegt die Eingabeumleitung nicht hin (könnte der Fall sein, wenn die GET-Methode funktioniert, POST aber nicht)
  2. Das temporäre Verzeichnis für die Ausgabeumleitung ist falsch eingestellt, wenn überhaupt vorhanden. (eher unwahrscheinlich, da andere Skripte laufen)
  3. Server ist ein 16Bit Prozess und versucht ein 32Bit Prozess zu kontrollieren (Perl.exe)
    Übrigens, versuche mal wperl.exe statt "perl.exe".

Vielleicht findest Du im FAQ-Forum des Herstellers paar Infos.
Sorry, mehr fällt mir dazu nicht ein. Dein Skript ist vollkommen korrekt.

Gruß,
Michael

Antwort 9 von semi

Hier vielleicht noch eine Bemerkungen von der folgenden Seite http://www.sambar.com/session/highlight?url=/syshelp/cgi.htm&words=...
Zitat:
May CGI/WinCGI applications especially 16-bit applications or Perl applications that perform file i/o based on the installation directory will not run if there are spaces in the directory path. To execute properly, the Sambar Server must be moved to a directory that has not spaces.
Klartext: Wenn der Server oder Perl irgendwo Leerzeichen im Pfad haben, dann läuft nix.


Antwort 10 von Pinky

Ok, wenn ich wie du angibst die GET-Methode verwende habe ich folgende Zeile in der Adressleiste:
http://localhost/cgi-bin/hallo.pl?fullname=meineeingabe, im Browserfenster wieder "Internal System Error".

Verwende ich die wperl.exe selbes Ergebnis.

Ich gebs jetzt auf. Hab mir erstmal nen Webspace mit Perl/Cgi gesucht, werds dann da mal probieren oder mal Apache installieren.

Antwort 11 von Pinky

So, Apache installiert, die 2 Dateien reinkopiert und schätzt mal .....

funktioniert einwandfrei.

Ich sag jetzt nix mehr zu Sambar, das ist bei mir unten durch.

Danke trotzdem für eure Bemühungen !

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: