Dokumentation ------------- "Upload-Parser 2.0" (modul) distributed under the terms of the GNU General Public License (GPL) (c) 2001-2002 by Reiner SilberStein (add your name!) www.skriptoase.de English summary at the bottom of the text. Übersicht: ---------- Bild-Upload-Skripte gibt es etliche im Netz. Leider gibt es meistens immer wieder die gleichen Probleme: Entweder sind die Parser von anderen CGI-Modulen abhängig (die bei fremdgehosteten Webspace nicht immer vorausgesetzt werden können), lassen die gleichzeitige Übermittlung von weiteren Formulardaten nicht zu oder lassen sich mit Image-Submit-Buttons nicht vereinbaren. Unser Upload-Parser bietet für diese Fälle eine Lösung. Zusammen mit dem Beispielskript upload.pl stellt dieses Paket eine smarte lauffähige Version dar, die den komfortablen Bilder-Upload auf Webseiten ermöglicht. Das Modul UploadParser.pm kann aber auch leicht für eigene Programme verwendet werden. Da die Nachfrage so groß ist, haben wir es mit Version 2.0 auch noch einmal komplett überarbeitet und zur Weiterentwicklung unter die GNU General Public Licence (GPL) gestellt. Möge Perl mit Euch sein! Die Features: ------------- - CGI-Parser für Formulardaten und gleichzeitigem Datei-Upload im Binärmodus (Bilder) - Einsatzfähig auf Win-, Unix- und Linux-Servern, IE ab 5.0 und Netscape ab 4.7 - Keine Verwendung von fremden Perl-Modulen - Einschränkung bestimmter Datei-Formate möglich - Dateigrößen einschränkbar - Verwendung von Image-Submit-Buttons möglich - Funktioniert auch mit der GET-Methode, allerdings dann nur ohne Upload - Ausgabe einer Upload-Bestätigung mit Template und Link zur Datei Voraussetzungen: ---------------- - Ein wenig HTML-, Perl- und CGI-Kenntnisse Versionen-History ----------------- 0.x: Verwendung beim Skript LineTimer 1.00: Release 1.10: Bugfixes (parser.pl: #41, #43) Erweiterung von upload.pl: Template und Linkangabe 1.11: Vereinfachte Pfadangaben für Bilder und Template 1.12: Bugfix für Netscape 6.x Diverse Vereinfachungen und Verbesserungen 2.00: Lizenz: GPL Modulform strict-konform Dateiname des Upload-Bildes änderbar Beispiel-Skript upload.pl speichern und ausprobieren ---------------------------------------------------- Für Unix/Linux-Server: Ermitteln Sie das Perl-Verzeichnis auf dem Provider-Server (Dokumentation oder Auskunft des Providers). In der Regel lautet es "#!/usr/bin/perl", "#!/usr/local/bin/perl" oder "#!/usr/bin/perl5". Tragen Sie diese Information in die erste Zeile des Skriptes upload.pl ein (Shebang). Für alle: Die Variable $cgiurl in upload.pl muss die URL zum Skript upload.pl selbst enthalten (WWW-Adresse mit http://). $pathofpictures beinhaltet den Serverpfad (z.B. /home/www/username/pictures, nicht http://...) zum Bilderverzeichnis und $urlofpictures die URL zu den Bildern (http://...) - das sollte aus Sicherheitsgründen niemals das CGI-Verzeichnis selbst sein! Mit der Variablen $maxuploadfilesize legen Sie die maximale Dateigröße in Byte fest. Dateien, die größer sind, werden mit einer Fehlermeldung abgelehnt. $pathtemplate gibt den Pfad zur Template-Datei an - wenn kein Template verwendet werden soll, dann einfach auskommentieren. An der Stelle, an der in diesem Template "" steht, setzt das Programm den eigenen Text ein. Die Perl-Skripte sind per FTP im eigenen CGI-Verzeichnis abzulegen (meistens cgi-bin), und zwar im ASCII-Übertragungsmodus (!). Für Unix- und Linux-Server: Stellen Sie die Eigenschaften (Properties) von upload.pl auf 755 ein (chmod) - also Owner: read-write-executable und Group/Other: read-executable. Das Verzeichnis für die Bilder muss auf 777 gesetzt werden - also alle Rechte für alle. Das Template muss wie in der Variable $pathtemplate angegeben abgelegt werden. Wo Sie die HTML-Seite mit dem Formular platzieren, ist Ihnen überlassen. Im Formular müssen Sie allerdings hinter "ACTION" die URL des Upload-Skriptes angeben (z.B. http://www.ihre-domain.de/cgi-bin/upload.pl). Auch die Adresse des CGI-Verzeichnisses erhalten Sie von Ihrem Provider. Zwar funktioniert der Parser für Text-Eingabefelder auch mit der Methode "GET", wenn Sie jedoch Dateien uploaden wollen, müssen Sie die Methode "POST" und als Enctype "multipart/form-data" verwenden. Bedenken Sie, dass das Skript in dieser Fassung nur für den Upload im Binärmodus (für Bilder) ausgerichtet ist - für den Upload im ASCII-Modus müssen Sie es dementsprechend selbst anpassen. Zum Test rufen Sie als erstes die Datei formular.htm im Browser auf, wählen ein Bild auf Ihrer Festplatte aus und starten den Upload. Anschließend sollten Sie eine neue Seite erhalten, auf der Ihr Bild abgebildet ist sowie der entsprechende Link dazu. Außerdem wird der vorher im Formular angegebene Kommentar mit angezeigt. Jetzt können Sie beginnen, Beispiel-Skript, Formular und Ausgabe-Template für Ihre Bedürfnisse abzuändern. Für Profis: Modul im eigenen Perl-Skript einbinden -------------------------------------------------- Wenn Sie das Parser-Modul in Ihrem eigenen Programm verwenden wollen, dann belassen Sie UploadParser.pm wie es ist, und bauen nur die Teile von upload.pl in Ihr eigenes Skript mit ein. Mit den Zeilen ... use FindBin; use lib $FindBin::Bin; use UploadParser; ... binden Sie das Modul in Ihr Skript ein. Bedenken Sie, dass das Modul bei dieser Art der Einbindung im selben Verzeichnis wie das aufrufende Perl-Skript liegen muss. Mit den Zeilen ... %form = &parseform(); $form{'uploadfilename'} = &upload(\%form,$pathofpictures,$maxuploadfilesize); ... rufen Sie den Parser auf und lassen die Datei speichern. Das Hash %form enthält dabei alle übermittelten Formulardaten inklusive Bild. Die anderen beiden Variablen sind oben erklärt. Im HTML-Formularfeld "uploadnewfilename" (also in der Hash-Variable $form{'uploadnewfilename'}) kann ein neuer Dateiname übergeben werden, der dann vom Namen auf der Festplatte des Clients abweichen kann. Das Modul behält aber auf alle Fälle die Dateiendung des Bildes bei, egal, ob eine neue Endung angegeben wurde oder nicht. Nach der ganzen Aktion beinhaltet $form{'uploadfilename'} den tatsächlichen Dateinamen, unter dem das Bild auf dem Server abgelegt worden ist. Bei Fragen wenden Sie sich bitte über das SupportForum an uns - so können auch andere an der Problemlösung teilhaben. English summary --------------- Surely, there is a quantity libraries in Perl, which make it possible to upload pictures. But mostly they all have the same restrictions: Either the parser functions only with special Perl-CGI-modules (some web-provider do not allow to install further modules!), does not permit the simultaneous transmission of further form data or could not agree with image submit buttons. This simple Skript Upload-Parser is a small solution for web-aplications without this restrictions. The features: - CGI-parser in Perl for simultaneously upload of formdatas and pictures (jpg and gif) - running on Win-, Unix- or Linux-Servers - no compellingly need for Perl-modules - restriction of special file-formats and -weight is possible - use of image-submit-buttons is possible This is already version 2.0 of the script, but I think it could be improved: I wish a multiple upload of pictures and it would be nice someone could implement the upload of all other file-formats like txt, zip, tar, mpg, doc etc.