Perl am Apache auf OS-X ?

mcmarty

mcmarty

Mitglied
Thread Starter
Dabei seit
11.07.2004
Beiträge
43
Reaktionspunkte
0
Hallo, bin grad dabei mein lokales Testenvironment auszubauen;
Apache läuft, PHP aktiviert, und wollte genauso bei Perl vorgehen;

hab also in der httpd.config Loadmodule / Addmodule dementsprechend aktiviert;

dann hab ich noch, weils das für PHP auch gebraucht hat, einen Type geadded:

AddType application/x-httpd-perl .pl

Aber, im Browser (Safari, Firefox) wenn ich ein .pl aufrufe, kommt immer nur das Fenster mit dem Source Code.

Kann mir wer weiterhelfen ?
 
So auf die Schnelle ist mir nur das aufgefallen:
Code:
<IfModule mod_mime.c>
...
    # Note 1: The suffix does not have to be the same as the language 
    # keyword --- those with documents in Polish (whose net-standard 
    # language code is pl) may wish to use "AddLanguage pl .po" to 
    # avoid the ambiguity with the common suffix for perl scripts.
...
 
Hallo,
Normalerweise sind Perl Skripte die im Webbrowser ausgeführt werden CGI Skripte. Daher ist die Endung meist .cgi anstatt .pl. Nur so am Rande. :)

Eine ganz wichtig Frage bei CGI/Perl Skripte ist immer ob sie die richtigen Rechte bzw. ob sie als ausführbare Datei gekennzeichnet sind.

Um ein CGI/PerlSkript als ausführbare Datei zu kennzeichnen, einfach das Terminal aufmachen und dann "chmod a+x Dateipfad" eingeben.
Den Dateipfad musst du nicht ganz ausschreiben, du kannst auch einfach die Datei in das Terminal Fenster ziehen und dann wird der Pfad automatisch reingeschrieben.

CGI/Perl Skripte müssen auch immer in einem speziellen Ordner auf dem Server liegen.
z.b. cgi-bin oder wie auf meinem Mac CGI-Executables
bei mir befindet sich der Webserver - Ordner unter /Library/WebServer und da gibt es 2 Ordner: CGI-Executables & Documents


Schritt für Schritt
wenn ich jetzt ein Skript habe das z.b. hallo_welt.cgi heißt, dann verschiebe ich das Skript zuerst in den Ordner CGI-Executables.
Dann öffne ich das Terminal und gebe : "chmod a+x /Library/WebServer/CGI-Executables/hallo_welt.cgi" ein.
Dann öffne ich Safari und gebe "http://127.0.0.1/cgi-bin/hallo_welt.cgi" ein.
127.0.0.1 ist der lokale Rechner und cgi-bin heißt soweit ich weiß immer cgi-bin egal ob der Ordner in dem sich das Skript befindet CGI-Executables oder cgi-bin oder irgendwie anders heißt.

Hoffe ich konnte dir ein wenig helfen. :)
 
Zuletzt bearbeitet:
Schöne Anleitung; die ist bestimmt für viele hilfreich.

Hier noch eine kleine Ergänzung:
TerminalX schrieb:
...
und cgi-bin heißt soweit ich weiß immer cgi-bin egal ob der Ordner in dem sich das Skript befindet CGI-Executables oder cgi-bin oder irgendwie anders heißt.
cgi-bin ist ein Alias, der in der Konfiguration des Webservers eingetragen ist.
Grundsätzlich ist der Name beliebig, cgi-bin hat sich aber als eine Art Standard herausgebildet.

Ein wichtiger Punkt ist, dass das Skript Verzeichnis außerhalb der DocumentRoot des Webservers liegen kann und sollte, damit die Skripte nicht als Datei heruntergeladen werden können. Das könnte ein Sicherheitsrisiko sein z.B. weil in den Skripten Zugangsdaten oder andere geheime Informationen enthalten sein können.
 
maceis schrieb:
Schöne Anleitung; die ist bestimmt für viele hilfreich.

Hier noch eine kleine Ergänzung:
cgi-bin ist ein Alias, der in der Konfiguration des Webservers eingetragen ist.
Grundsätzlich ist der Name beliebig, cgi-bin hat sich aber als eine Art Standard herausgebildet.

Danke für die Verbesserung. Ich hatte das schon einmal in der Konfigurationsdatei gelesen, doch hatte es vergessen. Danke :)

Hab nochmal nachgeschaut. In der httpd.conf(Pfad: /etc/httpd/httpd.conf) Datei steht:
ScriptAlias /cgi-bin/ "/Library/WebServer/CGI-Executables/"

Wie du schon gesagt hast, doch könnte man prinzipiell jeden beliebigen Namen hinschreiben.
Wenn jemand die Datei ändern möchte, legt vorher lieber ein Backup an.

Zitat aus der httpd.conf Datei:
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "/Library/WebServer/CGI-Executables/"

#
# "/Library/WebServer/CGI-Executables" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/Library/WebServer/CGI-Executables">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

</IfModule>
# End of aliases.


maceis schrieb:
Ein wichtiger Punkt ist, dass das Skript Verzeichnis außerhalb der DocumentRoot des Webservers liegen kann und sollte, damit die Skripte nicht als Datei heruntergeladen werden können. Das könnte ein Sicherheitsrisiko sein z.B. weil in den Skripten Zugangsdaten oder andere geheime Informationen enthalten sein können.
Kann man auch mit .htaccess unterbinden oder?


Vielleicht schreibe ich einmal ein Anfänger-Tutorial über Perl und Web.
 
Zuletzt bearbeitet:
dms schrieb:
Gibts doch schon tausendfach. Unter anderem direkt von der Apache Group: http://httpd.apache.org/docs/2.0/howto/cgi.html
Natürlich gibs welche. Doch sie zu finden ist eine Sache und oft sind sie auch auf Englisch wie bei deinem Link.
Und bei dem Tutorial auf der Apache Seite gehen sie nicht besonders weit. Der Großteil hat mit Apache zu tun und nicht wie man CGI Skripte schreibt. Also ein Tutorial vom einfach Perl Skript zum CGI Skript. Das CGI Module wird nur einmal kurz erklärt, doch kann es vieles vereinfachen.

z.b. :
Code:
print "Content-type: text/html\n\n";
dann fehlt noch das html Tag usw.
mit dem CGI Module schreibt man einfach:
Code:
print header(), start_html();
#den HTML Code
print end_html();

Wir können auch eine kleine Link Sammlung machen. Mit Tutorials, Tools, etc.
 
Ich finde die Idee grundsätzlich gut.
Gute Tutorials finden eigentlich immer den Zuspruch der Leser und helfen sicher auch vielen, die sich dann nicht weiter dazu äußern.
 
Klar ist das kein CGI-Howto, sondern eine Beschreibung wie man CGI auf dem Apache flot macht. Dachte Du meintest sowas, denn darum geht es hier ja. :)
 
dms schrieb:
Klar ist das kein CGI-Howto, sondern eine Beschreibung wie man CGI auf dem Apache flot macht. Dachte Du meintest sowas, denn darum geht es hier ja. :)
Also eigendlich beides, sowohl CGI-Howto wie auch eine kleine Beschreibung wie das mit dem Webserver funktioniert. Gehört ja zusammen. Dein Link ist auch auf Englisch wie ich vorher schon geschrieben habe und auf deutsch wäre das für manche vielleicht verständlicher. :)

(Jetzt komm bloß nicht mit einem deutschen Tutorial :D )
 
Kleiner Hinweis noch zum CGI Modul.
Nach meinem Kenntnisstand erzeugt cgi.pm einen erheblichen Overhead.
Der Nutzen hält sich meiner Ansicht nach in Grenzen, da cgi eigentlich nicht schwer ist.

Im Usenet kursieren Aussagen, dass das CGI Modul zu Effizienzeinbußen im Bereich von Faktor 5-15 (je nach Einsatz) führt.
Besonders ineffizient sei der Einsatz von CGI bei der Erzeugung von html Code (z.B. für Tabellen etc.).

Ich persönlich setze CGI nicht ein, nicht zuletzt auch deswegen, weil es den Code "verschleiert".

Was ich allerdings für sehr sinnvoll und effizient halte, ist der Einsatz von HTML::Template in Zusammenarbeit mit cgi Skripten, insbesondere dann, wenn Inhalte dynamisch aus MySQL Datenbanken ausgelesen werden.
Damit kann man sich extrem viel Arbeit bei der Entwicklung und vor allem auch bei der Wartung von Websites sparen.
 
Zurück
Oben Unten