Perl und CGI

musiKk

musiKk

Dr. Strangelove
Hallo,

ich wollte mich mal bilden und habe Perl gelernt. Meine Grundlage war erstmal ein kostenlos verfuegbares Buch.

Bei Kapitel 12 dann der erste Fehlschlag. Es geht um CGI-Programmierung. Man wird angewiesen, den http-Daemon httpd zu starten. Der ist bei mir sowohl vorhanden, als auch gestartet. ps ax | grep httpd sagt:
Code:
 2619 ?        Ss     0:00 /usr/sbin/httpd
 2620 ?        S      0:00 /usr/sbin/httpd
 2621 ?        S      0:00 /usr/sbin/httpd
 2622 ?        S      0:00 /usr/sbin/httpd
 2623 ?        S      0:00 /usr/sbin/httpd
 2624 ?        S      0:00 /usr/sbin/httpd
 2633 ?        S      0:00 /usr/sbin/httpd
 2634 ?        S      0:00 /usr/sbin/httpd
 2635 ?        S      0:00 /usr/sbin/httpd
Auch Fedoras grafische Dienste-Uebersicht erzaehlt mir, dass der Daemon laeuft.
Als allererstes Beispielprogramm wird folgendes verwendet:
Code:
#!/usr/bin/perl
use warnings;
use strict;

print "Content-type: text/plain\n\n";
print "Hello CGI World!\n";
print "You're calling from $ENV{REMOTE_HOST}\n";
Dieses soll die eigene IP-Adresse ausgeben (vermute ich?). Bei mir kommt aber folgendes:
Code:
Content-type: text/plain

Hello CGI World!
Use of uninitialized value in concatenation (.) or string at cgihello.plx line 7.
You're calling from
Irgendwie hats also nicht funktioniert. Weiss jemand, warum und was ich da machen muss? :/
Suche hat nicht viel gebracht.
 
also ich würd erstmal das CGI-Modul mit benutzen, vielleicht behebt das schon das Problem:
Code:
use CGI;
 
Nein, das steht weder so in der Anleitung (und die stimmt hoffentlich), noch bringt es was, wenn ichs ausprobier... :/
 
Hallo
Dieses Beispiel wird nur funktioniren, wenn es auf einen Webserver läuft und ausgeführt wird.
Dazu ist der httpd nebensächlich.
Die Funktion geht dahin, dass ein Script auf einem Webservwer (mit diesem Inhalt ) aufgerufen wird. Dann wird(so vorhanden) die Umgebungsvariable ausgegeben.
Da du use strict verwendest, wird eine nicht definierte Variable nicht zugelassen.

Gruß Wolfgang
 
Das ist mir schon alles klar. Nur was muss ich denn sonst fuer einen Webserver hier laufen haben? Ich dachte httpd waere alles. Und im Buch steht auch, httpd muss laufen und dann sollte das gehn.
Wenn ich in der Wikipedia beim Apache HTTP Server schaue, komme ich zu httpd.apache.org und das ist doch der Server? Und der laeuft ja auch.

Oder hab ich da irgendwas falsch verstanden?
 
Ja wie rufst du das CGI-Script denn auf? Das müsstest du schon über den Browser aufrufen, irgendwas ala http://localhost/cgi-bin/script.pl
Entschuldige, falls das doof klingt, aber irgendwie ist für mich noch nicht hervorgegangen, ob du das auch so aufrufst...
 
Hallo
Ich will meine Aussage nochmal etwas verdeutlichen:
Entscheidend ist, dass du einen Server hast, der dein CGI-script interpretiert.
Ob der als Einzelanwendung, oder deamon läuft oder wie der sich nennt, ist nebensächlich.
Das CGI muss also von diesem Server interpretiert werden, und liefert dem anfragenden (Browser telnet oder was immer) das Ergebnis zurück.


Wenn das alles gegeben ist, kannst du dir auch alle Umgebungsvariablen ausgeben lassen.
z.B. so:
Code:
print "$_  :\t$ENV{$_}\n" for keys %ENV;
[code]
der du fängst den fehler in deiner Zeile selbst ab, indem du erstmal fragst ob es diese variable gibt.
[code]
if ($ENV{REMOTE_HOST})
{
print "You're calling from $ENV{REMOTE_HOST}\n";
}
else
{
print "\$ENV{REMOTE_HOST} not found\n";
}

Gruß Wolfgang
 
Ja wie rufst du das CGI-Script denn auf? Das müsstest du schon über den Browser aufrufen, irgendwas ala http://localhost/cgi-bin/script.pl
Entschuldige, falls das doof klingt, aber irgendwie ist für mich noch nicht hervorgegangen, ob du das auch so aufrufst...

Wird nicht interpretiert -> Perl-Quelltext erscheint so im Browser.

Ich hab das Gefuehl, ich muss da wohl noch so einiges suchen und lesen... Ich komm mir grad vor, als wuerde ich mit der Tuer ins Haus platzen.
 
Wird nicht interpretiert -> Perl-Quelltext erscheint so im Browser.

hast du auch
Code:
#!/usr/bin/perl
in der ersten zeile stehen ?
dann natürlich noch den Content-type schicken.

also fast wie in deinem beispiel
an dem httpd dürfts auch nicht liegen weil des script ja ausgeführt wird und sonst alles
der fehler liegt im script

EDIT:
nimm $ENV{REMOTE_ADDR} und nicht $ENV{REMOTE_HOST}
 
Zuletzt bearbeitet:
Ja irgendwie habe ich wohl die ganze Zeit das falsche Verzeichnis benutzt. Klappen tuts zwar immer noch nicht, aber immerhin krieg ich jetzt andere Fehler... Denke mal, ich sollte es jetzt hinkriegen.
Trotzdem danke an alle. :)
 

Ähnliche Themen

Nginx als Reverse Proxy für Nextcloud und Emby

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

[Perl] Perl OO Methodenaufruf in anderem Objekt

ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

Shellskript - Fehler in Cron

Zurück
Oben