Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

2005-11-20 [de.comp.lang.perl.cgi] FAQ

3 views
Skip to first unread message

Volker Rattel

unread,
Sep 9, 2012, 8:08:02 PM9/9/12
to
Posting-frequency: weekly
Last-modifed: 2005-11-20
Version: 2.18
URL: http://www.worldmusic.de/perl/dclpc-faq.txt


dclpc-faq

H�ufig gestellte Fragen in de.comp.lang.perl.cgi


######################################################################
INHALTSVERZEICHNIS
######################################################################

Allgemeine Informationen

- Worum geht es in de.comp.lang.perl.cgi?
- Was sollte man _vor_ dem Posten in de.comp.lang.perl.cgi
beachten?
- Woher bekommt man die aktuelle Perl-Version?
- Wo gibt es Dokumentation �ber Perl und CGI?
- Wo findet man weiterf�hrende Literatur?
- Wo findet man Perl-Scripte und Module?
- Was f�r einen Editor gibt es f�r Perl?

Fehlerbehandlung und -vermeidung

- Bei der Ausf�hrung meines Scriptes tauchen Fehler auf.
- Mein Script l�uft nicht bei meinem Provider.
- Was hat es mit CHMOD 755 auf sich?
- Was bedeuten die Fehlernummern bei einem Servererror?
- Was bedeutet ein "Internal Server Error"?

Serverfragen

- Was ist der Unterschied zwischen einem Win32- und einem
UNIX-Server?
- Wo finde ich einen Provider f�r meine CGI-Scripte?
- Wie konfiguriere ich den Webserver, um Perl und CGI Scripte
ausf�hren zu k�nnen?
- Welche Sicherheitsaspekte sollte man beim Einsatz von
CGI-Scripten bedenken?
- Wie kann man Dateien vor mehrfachen Zugriff sch�tzen?

Versenden von Mail

- Wie pr�fe ich die Echtheit einer E-Mail-Adresse?
- Wie versende ich Mail?
- Wie versende ich Mail mit Attachments?
- Gibt es ein sendmail f�r Windows?

Verschiedene Informationen

- Welche Methoden gibt es, um ein Perl- / CGI-Script via HTML
aufzurufen?
- Wie kann man einen URL von einem Perl-Skript holen lassen?
- Wie extrahiert man URLs aus einer HTML-Datei?
- Wie generiert man einen g�ltigen HTML 4.x Header?
- Wie kann man die IP-Adresse eines Clients ermitteln?
- Wie implementiere ich ein Session-Tracking?

Anhang

- Kontakt
- History
- Credits
- Autor und Copyright
- Disclaimer
- Changes

######################################################################
ALLGEMEINE INFORMATIONEN
######################################################################

----------------------------------------------------------------------
Worum geht es in de.comp.lang.perl.cgi?
----------------------------------------------------------------------

In de.comp.lang.perl.cgi geht es um den Einsatz der
Programmiersprache Perl in CGI-Scripten.

Aus der Charta:

Diese Gruppe dient als Forum f�r die Erstellung, Installation
und Anpassung vorhandener CGI-Programme, die in der
Programmiersprache Perl realisiert sind. Komplette Listings
sind im Gegensatz zu Programmausz�gen (weniger als 75 Zeilen)
unerw�nscht. Ausdr�cklich sei betont, da� sich die Gruppe
nicht nur an Unix-Administratoren richtet, auch Benutzer
anderer Systeme sind willkommen.

F�r allgemeine Fragen zu Perl gibt es die Newsgroup

news:de.comp.lang.perl.misc

Crossposts innerhalb der de.comp.lang.perl.* Gruppen sind
unerw�nscht.

F�r Fragen zu Webservern (speziell f�r den Bereich .htaccess)
siehe die Newsgroup

news:de.comm.infosystems.www.servers

----------------------------------------------------------------------
Was sollte man _vor_ dem Posten in de.comp.lang.perl.cgi beachten?
----------------------------------------------------------------------

- Genaue Fehlerbeschreibung des Problems angeben

Siehe dazu die Checkliste unter

http://www.worldmusic.de/perl/checkliste.txt

- Die g�ngigen Usenet-Richtlinien beachten

Siehe dazu

news:de.newusers.infos

- Keine "Ich suche... " Postings nach Standard-Scripten

Es gibt gen�gend Wege selbst nach Scripten zu suchen.

- On-Topic bleiben

Fragen, die nicht im Zusammenhang mit Perl in CGI-Scripten
stehen, sondern Perl im allgemeinen behandeln, geh�ren nach

news:de.comp.lang.perl.misc

- RTFM

Bevor man postet sollte man wenigstens ein paar
Dokumentationen und FAQs gelesen haben.

----------------------------------------------------------------------
Woher bekommt man die aktuelle Perl-Version?
----------------------------------------------------------------------

Die aktuelle Perl-Version lautet 5.8.7. Im Einsatz auf
Produktions-Plattformen ist dies auch die stabile und getestete
Version.

Perl-Versionen f�r alle Betriebssysteme findet man unter

http://www.perl.com/download.csp

Das Modul CGI.pm geh�rt seit der Version 5.004 von Perl zur
Standard-Distribution. Die aktuelle Version von CGI.pm findet
sich unter

http://search.cpan.org/modlist/World_Wide_Web/CGI

CGI.pm �bernimmt viele Funktionen f�r das Erstellen und Senden von
CGI-Formularen und erleichtert den Umgang mit Standard-Routinen.

F�r den Bereich der Client-Programmierung und der Erstellung von
Web-Applikationen bietet das Modul libwww-perl (auch LWP genannt)
eine F�lle von Optionen. Das Modul kann man unter

http://search.cpan.org/modlist/World_Wide_Web/LWP

herunterladen.

Siehe auch: perldoc perlport

----------------------------------------------------------------------
Wo gibt es Dokumentation �ber Perl und CGI?
----------------------------------------------------------------------

Viele Fragen lassen sich bereits durch das Lesen der
hervorragenden Dokumentation l�sen, die bei der Distribution von
Perl dabei ist.

Um auf die Dokumentation zuzugreifen, gibt man in der
Kommandozeile seines jeweiligen Betriebssystems folgendes ein:

perldoc perltoc

Dieser Befehl zeigt einem das Inhaltsverzeichnis der
Dokumentation.

Mit 'perldoc perlfaq' erh�lt man das Inhaltsverzeichnis des FAQs.
Schlie�lich l��t sich mit perldoc CGI.pm ein FAQ zum Modul CGI.pm
anzeigen.

Hilfe zum Programm perldoc kann man mit 'perldoc perldoc'
aufrufen. Bei einigen Distributionen findet sich die Hilfe auch im
HTML-Format.

F�r Dokumentation zu CGI-Modulen bieten folgende Quellen die
M�glichkeit zur Nachforschung:

(deutsch)

http://www.oreilly.de/catalog/perlmodger/manpage/cgi.htm
http://www.linux-magazin.de/ausgabe/1998/03/CGI/cgi1.html
http://www.linux-magazin.de/ausgabe/1998/04/CGI/cgi2.html
http://www.linux-magazin.de/ausgabe/1998/05/CGI/cgi3.html
http://www.linux-magazin.de/ausgabe/1998/06/CGI/cgi4.html

(englisch)

http://language.perl.com/CPAN/doc/FAQs/cgi/idiots-guide.html
http://www.boutell.com/openfaq/cgi/
http://www.ietf.org/internet-drafts/draft-coar-cgi-v11-03.txt

Siehe auch: perldoc perl, perldoc perltoc, perldoc perlfaq

----------------------------------------------------------------------
Wo findet man weiterf�hrende Literatur?
----------------------------------------------------------------------

Es gibt zahllose B�cher zum Thema Perl. Einen �berblick �ber
deutschsprachige B�cher kann man sich in dem Dokument von J�rgen
W. Lang verschaffen:

http://www.worldmusic.de/perl/perlbuch.txt

Ansonsten sollte man sich mal bei

- Addison Wesley (http://www.awl.de/)
- O'Reilly (http://www.oreilly.de/)

umschauen (ohne Anspruch auf Vollst�ndigkeit).

Siehe auch: perldoc perlbook, perldoc perlfaq2

----------------------------------------------------------------------
Wo findet man Perl-Scripte und Module?
----------------------------------------------------------------------

Einsatzbereite Scripte gibt es unter

http://www.cgi-resources.com/

Perl-Module werden im CPAN (Comprehensive Perl Archive Network)
gesammelt. Zu finden unter

http://www.perl.com/CPAN/CPAN.html

Dort stehen _zahllose_ Module zum Download bereit. Das CPAN kann
auch durchsucht werden:

http://search.cpan.org

Siehe auch: perldoc perlmod, perldoc perlmodlib, perldoc CPAN

----------------------------------------------------------------------
Was f�r einen Editor gibt es f�r Perl?
----------------------------------------------------------------------

Immer wieder taucht die Frage auf, mit welchem Editor man
Perl-Scripte schreiben kann. Prinzipiell kann man seine Scripte
mit jedem Texteditor schreiben; wer allerdings Syntax-Highlighting
und andere Features w�nscht, sollte sich mal die folgenden
Editoren anschauen.

Die Liste erhebt keinen Anspruch auf Vollst�ndigkeit:

UNIX und Verwandte

- Emacs (http://www.emacs.org/)
- XEmacs (http://www.xemacs.org/)
- vim (http://www.vim.org/)

Windows und Konsorten

- Textpad (http://www.textpad.com/)
- UltraEdit (http://www.ultraedit.com/)
- EditPlus (http://www.editplus.com/)

Macintosh

- BBedit (Lite) (http://www.barebones.com)
- SimpleText (http://www.apple.de)

######################################################################
FEHLERBEHANDLUNG UND -VERMEIDUNG
######################################################################

----------------------------------------------------------------------
Bei der Ausf�hrung meines Scriptes tauchen Fehler auf.
----------------------------------------------------------------------

Perl bietet bereits eine Reihe von M�glichkeiten, die das
Fehleraufsp�ren erheblich erleichtern.

Jedes Programm sollte folgenderma�en beginnen:

#!/usr/bin/perl

use warnings;
use diagnostics;
use strict;

'use warnings' schaltet die Fehlermeldungen des Interpreters ein.
Durch 'use diagnostics' werden diese Meldungen zudem detailierter.
Das 'use strict' sorgt penibel daf�r, da� z. B. Variablen korrekt
initialisiert werden. Manchmal ist das strict allerdings so
ungn�dig und bricht das Programm ab, da� man sich unbedingt die
zugeh�rige Dokumentation mit 'perldoc strict' ansehen sollte, um
nicht zu verzweifeln.

Kann man die Ausf�hrung seines Scripts lediglich via Web
beobachten, so sorgt ein

use CGI::Carp qw(fatalsToBrowser);

daf�r, da� alle Fehlermeldungen an den Browser �bertragen werden.

Mit dem Aufruf 'perl -d mein_prog.pl' schaltet man den internen
Debugger ein, der sehr n�tzliche Fehler-Informationen bereith�lt.

Eine weitere Quelle f�r verdeckte Fehler sind ungetestete
R�ckgabewerte von Funktionsaufrufen. Man sollte daher immer
testen, ob bspw. die open() Funktion korrekt abgeschlossen wurde:

open (my $file, '<', './etc/passwd')
or die "Fehler beim �ffnen von /etc/passwd. Grund: $!\n";

Siehe auch: perldoc strict, perldoc CGI::Carp, perldoc -q error

----------------------------------------------------------------------
Mein Script l�uft nicht bei meinem Provider.
----------------------------------------------------------------------

Grunds�tzlich stellt sich die Frage, ob der Provider �berhaupt die
Ausf�hrung von CGI-Scripten sowie Perl erlaubt. Das kann nur
direkt mit dem jeweiligen Provider gekl�rt werden.

Wenn das gekl�rt ist, mu� das Script noch an die richtige Stelle
kopiert werden. Es ist �blich, da� dazu ein spezielles Verzeichnis
auf dem Server existiert das cgi-bin hei�t. Dorthin mu� das
Script kopiert werden.

Gemeinhin wird das Script mit der Dateiendung .cgi oder .pl
versehen. Dies kann jedoch von Provider zu Provider (bzw.
Webserver zu Webserver) variieren. F�r den Anfang ist man mit der
Endung .cgi gut beraten.

Nachdem nun das Script an der richtigen Stelle sitzt, mu� es noch
ausf�hrbar gemacht werden.

Generell sollte man sein Script zun�chst "offline" testen, damit
man sichergehen kann, da� es �berhaupt l�uft.

Ein wichtiger Punkt bei der �bertragung seines Scriptes per FTP
ist die Verwendung des ASCII-Modus. Bei WS_FTP kann man diesen am
unteren Bildschirmrand einstellen.

Hinweis:

Bei der Einstellung <auto> erkennt WS_FTP anhand der
Dateiendung, ob es sich um eine ASCII- oder Bin�rdatei
handelt. Wenn die Endungen .pl bzw. .cgi nicht eingestellt
worden sind, �bertr�gt WS_FTP die Dateien bin�r!

----------------------------------------------------------------------
Was hat es mit CHMOD 755 auf sich?
----------------------------------------------------------------------

Damit ein CGI-Script durch den Webserver ausgef�hrt werden
kann, mu� es "weltweite" Ausf�hrrechte besitzen. Mit dem Befehl
chmod unter UNIX erreicht man genau dieses.

Wer nur Zugang via FTP-Programm hat, kann trotzdem ein chmod
durchf�hren. Programme wie z. B. WS_FTP lassen dies auch zu. Dazu
selektiert man die entsprechende Datei und rechtsklickt darauf.
Nachdem man den Befehl chmod angew�hlt hat, erscheint eine
�hnliche Maske wie unten abgebildet. Dort m�ssen folgende Felder
selektiert werden:

+---------------------------------------------+
| Owner Group Other |
| |
| [X] Read [X] Read [X] Read |
| [X] Write [ ] Write [ ] Write |
| [X] Execute [X] Execute [X] Execute |
+---------------------------------------------+

Dies entspricht dem Kommandozeilenbefehl

chmod 0755 filename

Wenn man mit einer Gruppe von Benutzern zu tun hat, bietet sich
noch ein chmod 0775 an, was f�r die Gruppe Schreibrechte
bedeutet. Es mag sicherlich noch andere m�gliche Kombinationen
geben, doch hat sich ein chmod 0755 in der Praxis f�r den Anfang
gut bew�hrt. :-)

Siehe auch: chmod(1), perldoc -f chmod

----------------------------------------------------------------------
Was bedeuten die Fehlernummern bei einem Servererror?
----------------------------------------------------------------------

Bei der Ausf�hrung eines Scriptes erscheint eine Server- bzw.
Client-Fehlermeldung. Anhand der Codezahl lassen sich eventuelle
Fehler schneller eingrenzen.

Weitere Hinweise gibt es unter

http://www.ietf.org/rfc/rfc2616.txt
http://www.w3.org/Protocols/HTTP/1.0/spec.html#Status-Codes

Siehe auch: Dokumentation des jeweiligen Webservers

----------------------------------------------------------------------
Was bedeutet ein "Internal Server Error"?
----------------------------------------------------------------------

Bei dem Versuch ein Script auszuf�hren, erscheint eine Seite mit
einem "Internal Server Error".

Grunds�tzlich bedeutet dies, da� der Server ein Problem bei der
Verarbeitung oder Ausgabe des Scriptes hatte. Dieser Fehler taucht
z. B. dann auf, wenn ein Script falsch geschriebene Anweisungen
enth�lt und der Perl-Interpreter die Ausf�hrung abbricht.

Detailierte Informationen zur Fehlerursache finden sich in den
Logfiles des Webservers -- genauer gesagt in den Error-Logfiles.
Falls auf die Log-Dateien nicht zugegriffen werden kann, so k�nnen
mit Hilfe des folgenden Scriptes n�here Informationen
herausgefunden werden.

Hinweis:

Dies funktioniert nur bei dem Apache Webserver.

Einbinden in die .htaccess Datei:

ErrorDocument 500 /cgi-bin/internal-error.pl

Das Script internal-error.pl sieht folgenderma�en aus:

#!/usr/bin/perl -w
print "Content-type: text/plain\r\n\r\n";
print "Internal Server Error: $ENV{REDIRECT_ERROR_NOTES}\n";

Beim n�chsten Internal Server Error w�rden dann Informationen zur
Fehlerursache ausgegeben werden.

H�ufige Fehlerursachen sind falsch geschriebene Header am
Scriptanfang (Content-type), die den ber�hmten "Premature end of
script headers"-Fehler hervorrufen.

Siehe auch: Dokumentation des jeweiligen Webservers

######################################################################
SERVERFRAGEN
######################################################################

----------------------------------------------------------------------
Was ist der Unterschied zwischen einem Win32- und einem UNIX-Server?
----------------------------------------------------------------------

Grunds�tzlich m�ssen Perl-Scripte auf einem UNIX-Server mit
folgender Zeile beginnen:

#!/usr/bin/perl

Bei einigen UNIXen auch

#!/usr/local/bin/perl

genauen Aufschlu� gibt notfalls der Administrator.

Auf Win2000/WinXP Systemen mit Apache muss die Lage des
Perl-Interpreters als Windows-Dateipfad angegeben werden. Z. B.:

#!c:\perl\perl.exe

Zwar wird in Windows eine Systemvariable gesetzt, die mit Dateien
der Endung *.pl verkn�pft ist, auf obiger Konfiguration f�hrt dies
dennoch zu einem Error "Couldn't spawn child process" wenn ein
Script via CGI ausgef�hrt wird. Auf anderen Konfigurationen (mit
anderem Webserver als Apache) ist die Angabe des
Perlinterpreterpfades nicht n�tig (kann aber auch nicht schaden).

Unter UNIX spielt die Gro�- und Kleinschreibung ein Rolle. Ein

use Strict;

ist nicht gleich einem

use strict;

Gerade wer von Win32 auf UNIX umstellt, sollte seine Scripte auf
korrekte Schreibweise �berpr�fen.

Ohne auf die Vor- und Nachteile des jeweiligen Betriebssystems
einzugehen kann man sagen, da� unter UNIX standardm��ig mehr Tools
und Eigenschaften wie sendmail, cron oder File-Locking zur
Verf�gung stehen, die unter Windows nicht vorhanden sind oder aber
nachinstalliert werden m�ssen.

Wer welches Betriebssystem besser findet, ist letzenendes
Glaubenssache. Beide eignen sich f�r die Verwendung von Perl und
CGI.

Siehe auch: perldoc perlport, perldoc perlwin32

----------------------------------------------------------------------
Wo finde ich einen Provider f�r meine CGI-Scripte?
----------------------------------------------------------------------

Eine Suchmaschine zu dieser Thematik ist unter

http://www.freewebspace.net/

zu finden. Ein freier Script-Hoster ist bspw.

http://www.virtualave.net

----------------------------------------------------------------------
Wie konfiguriere ich den Webserver, um Perl und CGI Scripte ausf�hren
zu k�nnen?
----------------------------------------------------------------------

F�r Fragen zu Webservern siehe die Newsgroup

news:de.comm.infosystems.www.servers

Da eine vertiefende Beantwortung dieser Frage an dieser Stelle
nicht geleistet werden kann, folgen ein paar grunds�tzliche Dinge:

- Der Webserver mu� installiert und konfiguriert sein
- Perl mu� installiert sein
- Der Webserver mu� die Dateiendung .cgi oder .pl mit der
Ausf�hrung von Perl verbinden
- Gemeinhin wird die Ausf�hrung von CGI-Scripten auf ein
Verzeichnis namens 'cgi-bin' begrenzt
- Die Scripte m�ssen ausf�hrbar und via Web aufrufbar sein

Zu bemerken bleibt, da� CGI-Scripte generell nicht von einem
bestimmten Aufrufpfad ausgehen sollten. Dieses ist im CGI-
Standard auch nicht festgelegt.

----------------------------------------------------------------------
Welche Sicherheitsaspekte sollte man beim Einsatz von CGI-Scripten
bedenken?
----------------------------------------------------------------------

Mittels einer ausreichend gro�en Datei ist es m�glich, bei einer
POST Operation oder eines Datei-Uploads den betreffenden Server
lahmzulegen. Dies wird auch als "Denial of Service"-Attacke
bezeichnet.

Unter der Verwendung von CGI.pm lassen sich pr�ventiv folgende
Einstellungen treffen:

$CGI::POST_MAX gibt die in Bytes zul�ssige Gr��e f�r POST-
Operationen an.

$CGI::DISABLE_UPLOADS unterbindet Datei-Uploads vollst�ndig.

Beispiel:

#/usr/bin/perl -w

use strict;
use CGI qw/:standard/;

$CGI::POST_MAX = 1024 * 100; # maximal 100K Postings
$CGI::DISABLE_UPLOADS = 1; # keine Uploads

Sicherhaltshalber sollten Speicher, CPU-Zeit und Plattenplatz
f�r CGI-Scripte serverseitig limitiert werden.

Desweiteren sollte der Parameter '-T' in Betracht gezogen werden,
der Perl veranla�t im sogenannten taint mode zu starten. In diesem
Modus werden spezielle Sicherheits�berpr�fungen durchgef�hrt.

Vielfach befinden sich Scripte aus Matt's Script Archive (MSA) im
Einsatz in Produktionsumgebungen. Diese Scripte sind gerade bei
unerfahrenen Anwendern sehr beliebt, weil sie sehr schnell zu
installieren sind. Leider sind diese Script _�u�erst_ unsicher
und stellen ein gro�es Sicherheitsrisiko dar! Unter

http://nms-cgi.sourceforge.net/

entsteht ein Projekt, da� sich zum Ziel gesetzt hat, die MSA
Scripte durch sicherere Varianten zu ersetzen.

Siehe auch: perldoc CGI.pm, perldoc -q cgi, perldoc perlsec

----------------------------------------------------------------------
Wie kann man Dateien vor mehrfachen Zugriff sch�tzen?
----------------------------------------------------------------------

Um Dateien vor gemeinsamen Zugriff zu sch�tzen, kann man ein
sogenanntes File-Locking durchf�hren.

Beispiel:

#!/usr/bin/perl

use warnings;
use strict;
use Fcntl ':flock';

my $my_file = '/tmp/foo.txt';

open (my $file, '<', $my_file)
or die "Kann $my_file nicht �ffnen: $!";
flock ($file, LOCK_SH)
or die "Kann $my_file nicht sperren: $!";
# Irgend etwas mit my_file anstellen...
close ($file)
or die "Kann $my_file nicht schlie�en: $!";

Die Funktion flock() erwartet zum einen das zu sperrende
Filehandle und zum anderen eine Zahl, die die Art des zu
verwendenden Lockings angibt. Verwendet man das Modul Fcntl, kann
man die Zahlen durch unten genannte Platzhalter ersetzen. Die
Werte haben folgende Bedeutung:

1 LOCK_SH Shared Lock (f�r Leseoperationen)
2 LOCK_EX Exclusive Lock (f�r Schreiboperationen)
4 LOCK_NB Nonblocking Lock (h�lt die Anwendung nicht an)
8 LOCK_UN Lock aufl�sen

Das Schlie�en des zuvor gesperrten Filehandles hebt das Lock
auf.

Hinweis:

Betriebssysteme wie Windows (3.11, 95, 98) besitzen kein
File-Locking!

Grunds�tzlich sollte man eine Datei mittels LOCK_SH sperren, wenn
man aus ihr nur lesen m�chte. Bei Schreiboperationen sollte man
das LOCK_EX verwenden.

Siehe auch: perldoc -f flock, perldoc -q lock, perlopentut(1),
perlfunc(1), open(2), dup(2), fopen(2), fdopen(2)

######################################################################
VERSENDEN VON MAIL
######################################################################

----------------------------------------------------------------------
Wie pr�fe ich die Echtheit einer E-Mail-Adresse?
----------------------------------------------------------------------

Der einzige Weg zur reinen Gewissheit ist dieser:

- Du erh�ltst eine Mail-Adresse, die Du pr�fen m�chtest
- Du schreibst an diese Adresse folgende Nachricht:
Hallo,
wenn dieser Account echt ist, dann beantworte doch
bitte folgende Frage: "Wer hat den 'Herr der Ringe'
geschrieben?"
- Wenn Du eine Antwort erh�ltst (und diese J. R. R. Tolkien
lautet) dann ist davon auszugehen, da� der Account echt ist.

Fazit: Man kann zwar �berpr�fen, ob die E-Mail-Adresse aus
erlaubten Zeichen besteht und es l��t sich auch �berpr�fen, ob
eine Mail an diesen Account bounced, jedoch sagt dies noch nichts
�ber die Echtheit des Accounts aus.

Ein gutes Tool zum �berpr�fen von Adressen stammt von Tom
Christiansen und nennt sich addrcheck. Es findet sich unter

http://www.cpan.org/modules/by-module/Proxy/TOMC/scripts/ckaddr.gz

Siehe auch: perldoc -q "valid mail"

----------------------------------------------------------------------
Wie versende ich Mail?
----------------------------------------------------------------------

Man kann den MTA (Mail Transport Agent) direkt aufrufen:

open(SENDMAIL, '|/usr/lib/sendmail -oi -t -f f...@example.com -odq')
or die "Kein fork fuer sendmail: $!\n";
print SENDMAIL <<'EOF';
From: Foo <f...@example.com>
To: Bar <b...@example.com>
Subject: Wichtig!

Inhalt der Nachricht, wobei die oben stehende Leerzeile
von Bedeutung ist.
EOF
close(SENDMAIL)
or warn "Sendmail nicht korrekt beendet";

Alternativ dazu kann man das CPAN Modul Mail::Mailer benutzen.

Wenn die Empf�ngeradresse aus einer Variablen stammt, so sollte
man unbedingt sicherstellen, dass sie keine unerlaubten Zeichen
enth�lt.

Siehe auch: perldoc -q "send mail", perldoc Mail::Mailer, perldoc
Net::SMTP, sendmail(8)

----------------------------------------------------------------------
Wie versende ich Mail mit Attachments?
----------------------------------------------------------------------

Mit dem CPAN Modul MIME::Lite. Es erlaubt z. B. das Versenden von
angeh�ngten Bildern oder multipart messages.

Beispiel:

#!/usr/bin/perl

use warnings;
use strict;
use MIME::Lite;

my $msg = MIME::Lite->new(
From => 'f...@example.com',
To => 'b...@example.com',
Subject => 'Look at this',
Type => 'image/gif',
Encoding => 'base64',
Path => 'foo_and_bar.gif',
);
$msg->send();

Siehe auch: perldoc MIME::Lite

----------------------------------------------------------------------
Gibt es ein sendmail f�r Windows?
----------------------------------------------------------------------

Sendmail ist ein UNIX-Programm und nicht f�r Windows-Systeme
verf�gbar. Alternativ dazu kann man das Programm Blat benutzen:

http://blat.net/

Desweiteren sollte man die Dokumentation der CPAN Module
Mail::Mailer und Net::SMTP lesen.

Siehe auch: perldoc -q "send mail", perldoc Mail::Mailer, perldoc
Net::SMTP

######################################################################
VERSCHIEDENE INFORMATIONEN
######################################################################

----------------------------------------------------------------------
Welche Methoden gibt es, um ein Perl- / CGI-Script via HTML
aufzurufen?
----------------------------------------------------------------------

Zun�chst sollte folgender Sachverhalt Erw�hnung finden:

CGI ist nicht Perl!

Das Common Gateway Interface (CGI) ist lediglich eine
Schnittstelle zwischen dem WWW-Server und dem aufgerufenen
Programm. CGI-Programme k�nnen in beliebigen Programmiersprachen
gehalten sein. Perl ist eine davon. Eine ausf�hrliche Beschreibung
der CGI-Schnittstelle gibt es unter

http://hoohoo.ncsa.uiuc.edu/cgi/interface.html

F�r einen Aufruf �ber eine HTML-Seite gibt es grunds�tzlich
mehrere Wege:

(1) GET-Methode

Alle �bergebenen Parameter werden in der URL kodiert und dem
Web-Server �bermittelt. Die Parameter k�nnen dann aus der
Umgebungsvariable QUERY_STRING gelesen werden. Die Variable
REQUEST_METHOD wird in diesem Fall auf GET gesetzt.

Beispiel:

<a href="./my_script.cgi">Click</a>

Dies erzeugt einen Textlink, der das Script my_script.cgi
aufruft.

Um dem Script Parameter zu �bergeben, k�nnen diese angeh�ngt
werden.

Beispiel:

<a href="./my_script.cgi?id1=1&amp;id2=2">Click</a>

Anmerkung:

Gem�� HTML 4.0 sollten Parameterverkn�pfungen per '&' im
HTML-Code durch ein '&amp;' codiert werden. Siehe dazu

http://ppewww.ph.gla.ac.uk/~flavell/www/formgetbyurl.html

Die Parameter 'id1' und 'id2' lassen sich dann z. B. mit CGI.pm
abfragen:

#!/usr/bin/perl

use warnings;
use strict;
use CGI;

my $query = new CGI;
my $para1 = $query->param('id1');
my $para2 = $query->param('id2');

(2) POST-Methode

Im Gegensatz zur GET-Methode werden die Daten nicht �ber die URL
kodiert, sondern an den HTTP-Header angeh�ngt. Das hat zur Folge,
da� die Parameter nicht in der URL-Zeile des Browsers zu sehen
sind. Die Variable REQUEST_METHOD wird auf POST gesetzt und die
L�nge der Daten steht in CONTENT_LENGTH.

Beispiel:

<form action="./my_script.cgi" method="post">
<input type="text" name="id1" />
<input type="text" name="id2" />
<input type="submit" value="Click" />
</form>

Die Parameter lassen sich mit CGI.pm genauso auslesen wie oben
beschrieben.

Hinweis:

Bei der Verwendung von CGI.pm mu� man sich nicht um die
verwendete REQUEST_METHOD k�mmern; CGI.pm entscheidet selbst
und stellt die Parameter in param() zur Verf�gung.

(3) Server-Side Includes (SSI)

SSI sind Tags, die direkt im HTML-Quellcode eingetragen werden.
Dadurch wird das Perl-Script beim Laden der Seite ausgef�hrt und
kann somit zum Erzeugen dynamischer Inhalte verwendet werden
(z. B. Web-Counter oder Banner).

Um via SSI ein Script in eine HTML-Seite einzubinden, kann man
folgende Methode benutzen:

<!--#include virtual="/cgi-bin/my_script.pl?id1=1&id2=2" -->

oder

<!--#exec cgi="/cgi-bin/my_script.pl" -->

Das Leerzeichen vor dem '-->' ist wichtig! Fehlt es, kommt es zu
Fehlermeldungen des Webservers und das Script wird nicht
ausgef�hrt. Weiterhin ist zu beachten, da� der Webserver f�r den
Einsatz von SSI entsprechend konfiguriert ist. Einige Server
werden durch die Dateiendung '.shtml' anstatt '.html' zur
Verarbeitung von SSI veranla�t. Zudem lassen sich per SSI keine
Scripte auf fremden Rechnern ausf�hren.

Weitere Dokumentation (Apache) findet sich unter

http://www.apache.org/docs/mod/mod_include.html

Siehe auch: perldoc CGI.pm

----------------------------------------------------------------------
Wie kann man einen URL von einem Perl-Skript holen lassen?
----------------------------------------------------------------------

Um eine HTML-Datei von einem anderen Server anzusprechen,
verwendet man das Modul LWP::Simple aus dem CPAN.

Beispiel:

#!/usr/bin/perl

use warnings;
use strict;
use LWP::Simple;

my $URL = 'http://www.example.com';
my $page = get($URL);

die "Fehler beim Holen von $URL: $!" unless defined $page;

Siehe auch: perldoc LWP::Simple

----------------------------------------------------------------------
Wie extrahiert man URLs aus einer HTML-Datei?
----------------------------------------------------------------------

Man verwendet das Modul HTML::LinkExtor aus dem CPAN.

Siehe auch: perldoc HTML::LinkExtor, perldoc -q url

----------------------------------------------------------------------
Wie generiert man einen g�ltigen HTML 4.x Header?
----------------------------------------------------------------------

Der HTML-Standard 4.x sieht vor, dem Document-Header eine
Definition des verwendeten Charsets hinzuzuf�gen. Dies geschieht
mittels

print "Content-Type: text/html; charset=iso-8859-1\r\n\r\n";

wobei iso-8859-1 lediglich ein Beispiel ist.

Siehe auch: perldoc CGI.pm

----------------------------------------------------------------------
Wie kann man die IP-Adresse eines Clients ermitteln?
----------------------------------------------------------------------

In der Theorie steht die IP-Adresse eines Clients in der
Environment Variable $ENV{'REMOTE_ADDR'}. Allerdings verwenden
viele User heutzutage einen Proxyserver. Somit bekommt man
lediglich die Adresse des Proxyservers heraus.

Eine Ausnahme bildet der Fall, wenn der Proxy-Server selbst eine
Variable setzt. Dann findet sich die IP-Adresse gemeinhin unter
$ENV{'HTTP_CLIENT_IP'}.

----------------------------------------------------------------------
Wie implementiere ich ein Session-Tracking?
----------------------------------------------------------------------

Da HTTP mit nicht-persistenten Verbindungen arbeitet (nach einem
Request ist die Verbindung zwischen Webserver und Client
unterbrochen) ist ein Session-Tracking nicht
trivial. Grunds�tzlich kann man folgende Methoden in Betracht
ziehen:

- Cookies

Man setzt auf dem Client ein Cookie. Wenn der Client
diesen ablehnt oder der Empfang ausgeschaltet ist,
funktioniert diese Methode nicht.

- HTML Hidden-Fields

Man �bergibt der HTML-Seite ein sogenanntes Hidden Field,
in dem man Informationen �ber die Session
speichert. Vorrausetzung daf�r ist aber, da� das
CGI-Script bei jeder Aktion des Clients aufgerufen wird,
um dessen Session ID nicht zu verlieren.

Siehe auch: perldoc CGI.pm, perldoc CGI::Cookie

######################################################################
ANHANG
######################################################################

----------------------------------------------------------------------
Kontakt
----------------------------------------------------------------------

Kritik, Anregungen und Erg�nzungen sind immer willkommen. Schreibt
eine Mail an Volker Rattel <vra...@noarch.net> mit dem Betreff
"dclpc-faq".

Die aktuelle Version dieses Dokumentes ist unter folgender Adresse
zu erreichen:

- ASCII

http://www.worldmusic.de/perl/dclpc-faq.txt
http://noarch.net/perl/dclpc-faq.txt

- HTML

http://www.worldmusic.de/perl/dclpc-faq.html
http://noarch.net/perl/dclpc-faq.html

Die ASCII-Version wird einmal in der Woche nach
news:de.comp.lang.perl.cgi gepostet.

----------------------------------------------------------------------
History
----------------------------------------------------------------------

Dieses FAQ wurde inspiriert durch das von J�rgen W. Lang
geschriebene mini-FAQ "[de.comp.lang.perl.misc] Erst lesen - dann
posten" zu finden unter

http://www.worldmusic.de/perl/mini-faq.txt

und l�st in der *.cgi Gruppe das "mini-FAQ" ab. Das "mini-FAQ"
wird nat�rlich weiterhin in der *.misc Gruppe gepostet.

Hintergrund:

Durch die Aufsplittung der alten Gruppe de.comp.lang.perl in
die beiden Untergruppen *.misc und *.cgi eignen sich die
behandelten Themen f�r zwei FAQs.

----------------------------------------------------------------------
Credits
----------------------------------------------------------------------

Mein Dank geht an folgende Personen f�r Ihre Unterst�tzung und
Mithilfe:

- J�rgen W. Lang - Stefan Hornburg - Boris Piwinger
- Martin H. Sluka - Philip Newton - Michael Gerth
- Wolfgang Wiese - Udo Held - Thomas Berger
- Martin Vorl�nder - Bj�rn H�hrmann - Christian Lackas
- Florian Weingarten - Thomas Neumann - Tobias Zimpel
- Martin Ackermann - Thoren Johne - Tina M�ller
- Peter Kraume - Georg Rehfeld - Joachim Zobel
- Tobias Wolter - Voelki - Ulrich Nehls
- Frank Wiegand - Daniel Liebig

----------------------------------------------------------------------
Autor und Copyright
----------------------------------------------------------------------

Copyright (C) 1999 - 2005 by Volker Rattel <vra...@noarch.net>
Alle Rechte vorbehalten.

----------------------------------------------------------------------
Disclaimer
----------------------------------------------------------------------

Die hier aufgef�hrten Antworten sind nach bestem Wissen und
Gewissen zusammengestellt worden. In jedem Fall gilt nat�rlich
TMTOWTDI (There's More Than One Way To Do It).

Der Autor �bernimmt keinerlei Haftung f�r die Richtigkeit der hier
beschriebenen Methoden. Die Verwendung der Informationen aus
diesem Dokument geschieht auf eigene Verantwortung.

----------------------------------------------------------------------
Changes
----------------------------------------------------------------------

20 Nov 2005
23 Okt 2005
17 Jul 2004
07 Nov 2003
19 Okt 2003
27 Jul 2003
25 Mai 2003
17 Feb 2002
09 Sep 2001
14 Mai 2001
07 Apr 2001
12 Nov 2000
03 Okt 2000
14 Aug 2000
17 Jun 2000
08 Jun 2000
14 Apr 2000
24 Jan 2000
10 Dez 1999
29 Nov 1999

__END__
--
Posted: Mon Sep 10 00:08:01 2012

Volker Rattel

unread,
Sep 16, 2012, 8:08:01 PM9/16/12
to
Posted: Mon Sep 17 00:08:01 2012
0 new messages