Perl / CGI - Fehlermeldung oder kein Zugriff

run4fun

Mitglied
Thread Starter
Dabei seit
15.03.2004
Beiträge
26
Reaktionspunkte
0
Hallo Leute,

ich habe ein eMac und OS X 10.3.4
Wenn ich im TERMINAL >perl -v< eingebe, erscheint folgende Meldung:
________________________________________________________________
This is perl, v5.8.1-RC3 built for darwin-thread-multi-2level
(with 1 registered patch, see perl -V for more detail)
________________________________________________________________

Ich benutze den Apache 2.0.47.
Sofern ich was auf der httpd.conf Datei ändern sollte, so liegt diese nicht unter /etc/httpd/httpd.conf sondern
sie liegt unter /Library/Apache2/conf/httpd.conf.

Wenn ich das Test-Skript (test-cgi) laufen lasse, funktioniert das auch:
Das Test-Skript liegt im cgi-bin-Ordner unter Apache2. Der Pfad lautet:
/Library/Apache2/cgi-bin/test-cgi.

Aber wenn ich ein eigenes Skript in dieses Verzeichnis lege, erscheint entweder eine Meldung wie:
________________________________________________________________
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, you@your.address 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/2.0.47 (Unix) DAV/2 PHP/4.3.2 Server at 127.0.0.1 Port 80
________________________________________________________________

oder die Meldung, dass ich keine Rechte hätte, auf diesen Server zuzugreifen.

Wenn ich ein Skript in mein Home-Verzeichnis lege, wird nur der Text angezigt, aber keine Befehle ausgeführt. Teilweise erscheinen auch die oben genannten Meldungen.

Was mache ich falsch?

Über eine Hilfe würde ich mich sehr freuen, da ich nunmehr viele Stunden und Tage damit verbracht habe dieses Problem selber zu lösen und einfach nicht weiter komme.

Viele Grüße
run4fun
:confused:
 
Das Script muss ausführbar sein (chmod 755 scriptname) und die erste Zeile muss zum Perl-Interpreter zeigen (etwa #!/usr/bin/perl -w).
Um mehr Infos über einen Internal Server Error zu sehen, sollten die ersten Zeilen deines Scripts so aussehen:

Code:
#!/usr/bin/perl -w

use strict;
use warnings;
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);

# mehr code

Funktioniert natürlich nur wenn die Datei ausführbar ist.
 
Forbidden (WARUM?)

Mein Skript "hello1.pl" funktioniert im Terminal, wenn ich es dort aufrufe unter "perl hello1.pl"
Wenn ich es aber in Safari unter

http://127.0.0.1/hello1.pl

aufrufe, erscheint folgende Meldung:
_______________________________________________________________
Forbidden
You don't have permission to access /web924/hello1.pl on this server.
Apache/2.0.47 (Unix) DAV/2 PHP/4.3.2 Server at 127.0.0.1 Port 80
_______________________________________________________________

Ich schwöre, die Rechte von "hello1.pl sind auf "rwxrwxrwx" gesetzt. Warum erscheint im Safari obige Meldung???

Achja, hier ist der Quelltext von "hello1.pl"

------------------------------------------------------------------------------------
#!/usr/perl -w
print "<html><body>Hallo Welt\n</body></html>";
print "Ist da jemand?\n";
print "Bitte tippe Deinen Namen ein!\n";
$name = <STDIN>;
print "Oh, ich bin nicht mehr alleine. Hallo $name!\n";
------------------------------------------------------------------------------------
 
run4fun schrieb:
Mein Skript "hello1.pl" funktioniert im Terminal, wenn ich es dort aufrufe unter "perl hello1.pl"

Du solltest das Skript mit ./hello1.pl aufrufen, wenn das funktioniert weisst du, dass es ausführbar ist. perl hello1.pl schickt den Inhalt der Datei an den Perl-Interpreter, der ihn ausführt, durch ./hello1.pl wird die Datei direkt ausgeführt, das heisst die Shell (bash) liest die erste Zeile im Skript und erkennt an "!#" das sie den Code an nachfolgendes Programm schicken soll.

Wenn ich es aber in Safari unter

http://127.0.0.1/hello1.pl

aufrufe, erscheint folgende Meldung:

Bist du sicher, dass der URL stimmt?
In deinem letzten Post sagtest du
Das Test-Skript liegt im cgi-bin-Ordner unter Apache2. Der Pfad lautet:
/Library/Apache2/cgi-bin/test-cgi.
Demnach sollte das Skript mit http://127.0.0.1/cgi-bin/hello1.pl erreichbar sein.


Ich schwöre, die Rechte von "hello1.pl sind auf "rwxrwxrwx" gesetzt. Warum erscheint im Safari obige Meldung???

Diese Rechte erlauben jedem alles, der Modus für ein ausführbares Skript sollte 0755 sein (rwxr-xr-x), niemals 0777!


Achja, hier ist der Quelltext von "hello1.pl"

------------------------------------------------------------------------------------
1) #!/usr/perl -w
2) print "<html><body>Hallo Welt\n</body></html>";
print "Ist da jemand?\n";
print "Bitte tippe Deinen Namen ein!\n";
3) $name = <STDIN>;
print "Oh, ich bin nicht mehr alleine. Hallo $name!\n";

1) Dieser Pfad ist mit 99%iger Sicherheit falsch, finde mit einem `which perl` im Terminal heraus wo dein Perl-Interpreter liegt (wahrscheinlich in /usr/bin/perl).
2) Du gibst Text auf die Standardausgabe aus, bevor du einen HTTP-header an den Browser gesendet hast, das erzeugt bei CGI-Skripten einen "Internal Server Error".
Sende (mindestens) "Content-type: text/html\n\n" an den Browser:

Code:
#!/usr/bin/perl -w

print "Content-Type: text/html\n\n"; # genau so!
print "<html><head><title>Hallo Welt!</title></head>";
# ...

Du kannst auch das CGI-Modul benutzen das dir viel Arbeit abnimmt, damit sähe dein Skript etwa so aus:

Code:
#!/usr/bin/perl -w

use strict; 
use CGI;
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);

my $c = new CGI;

print $c->header, $c->start_html("Hallo Welt!");
print "..."
print $c->end_html();


3) Du kannst so nicht von der Standardeingabe lesen, das geht im Terminal, als CGI-Skript jedoch nicht.
 
Zuletzt bearbeitet:
Vielen Dank; jetzt geht es !

Hallo canfAN,

vielen Dank, dass Du Dir die Mühe gemacht hast um mir zu Antworten! carro
Deine Anmerkungen haben mir geholfen die Probleme zu erkennen und zu beseitigen. Nun funktioniert das alles! :D


Viele Grüße

run4fun pepp
 
Zurück
Oben Unten