File Uploads

Das Formularfeld “File Upload”

Upload Felder sind Formularfelder, mit denen der Formularbenutzer Ihnen eine Datei zukommen lassen kann. Diese Datei wird in ein Verzeichnis Ihrer Wahl auf Ihrem Server geladen. Sie k├Ânnen in Visforms einem Formular ein Upload Feld hinzuf├╝gen, indem Sie ein Feld vom Typ “File Upload” erstellen.

Das HTML Control “Upload File”

file upload control

Das Control, das bei einem Upload Feld im Formular angezeigt wird, hat einen Button. Mit dessen Hilfe kann eine Datei, die hochgeladen werden soll, auf dem lokalen Rechner ausgew├Ąhlt werden. Weiterhin hat das Control einen Bereich, in dem der Dateiname der hochzuladenden Datei angezeigt wird. Die Anzeige des Dateinamen wird sichtbar, nachdem eine Datei mithilfe des Buttons ausgew├Ąhlt wurde.

Der Browser kontrolliert das Aussehen des Controls

Das Control wird komplett vom Browser erzeugt. Es kann daher in unterschiedlichen Browsern unterschiedlich aussehen. Auch der Button-Text (z.B. “Durchsuchen”) wird vom Browser geliefert. Deshalb ├Ąndert sich die Sprache des Button-Texts auch nicht wie alle anderen Texte, wenn Sie eine mehrsprachige Joomla Webseite haben und die Sprache ├Ąndern.

Die Sprache des Button-Texts ist immer in der Sprache des Browsers. Diese wird durch das Betriebssystem festgelegt oder bei der Browser Installation gew├Ąhlt/festgelegt. Die Sprache des Button-Texts kann daher mit Visforms nicht beeinflusst werden.

Dateiname kann nicht programmatisch gesetzt werden

Kein JavaScript-Zugriff m├Âglich

Eine weitere Besonderheit des Upload Controls ist es, dass sein Wert, also welche Datei hochgeladen werden soll, nur durch die Verwendung des Buttons gesetzt werden kann. Sein Wert kann nicht programmatisch, gesetzt werden, etwa mit JavaScript. Das liegt daran, dass der Browser im Hintergrund eine Menge Arbeiten rund um die hochzuladende Datei ausf├╝hrt. Diese Hintergrund-Arbeiten w├╝rden alle nicht erfolgen, wenn der Dateiname programmatisch gesetzt w├╝rde. Au├čerdem speichert der Browser dabei Informationen, die er f├╝r den Upload benutzt. Diese Arbeiten sind Browser-intern und k├Ânnen nicht von au├čen programmatisch beeinflusst werden.

Upload-Feld ist immer leer

Das ist auch der Grund daf├╝r, warum ein Upload-Feld immer leer ist, wenn das Formular noch einmal vorlegt wird. Das geschieht immer dann, wenn bereits ├╝bermittelte Daten die Validierung auf dem Server nicht bestanden haben. Alle anderen, vom Benutzer bereits eingegebenen Informationen, sind davon nicht betroffen und werden wieder angezeigt.

Die hochzuladende Datei wird mit dem POST ├╝bermittelt

Der Prozess des Datei-Uploads besteht aus mehreren wesentlichen Schritten.

Der Browser ist hierbei daf├╝r verantwortlich, dass die Daten der Datei an den Server ├╝bermittelt werden. So wie bei allen anderen Daten auch, die mit einem Formular ├╝bertragen werden. Hierzu werden auch die Daten der Datei gepackt und gemeinsam mit allen anderen Formulardaten an den Server geschickt.

Der Server entpackt die Daten und speichert die hochgeladene Datei unter einem tempor├Ąren Namen in einem Zwischenverzeichnis.

Es ist dann die Aufgabe der Anwendung, in diesem Fall von Visforms, zu entscheiden, was weiter mit der tempor├Ąren Datei geschieht. Hierzu geh├Ârt einerseits eine gr├╝ndliche Validierung der Datei entsprechend den Vorgaben in der Formularkonfiguration bez├╝glich Gr├Â├če, und Dateierweiterung. Andererseits geh├Ârt dazu eine ├ťberpr├╝fung entsprechend den Joomla Standards bez├╝glich der Frage, ob die Datei eventuell gef├Ąhrliche Inhalte enth├Ąlt. Visforms ├╝bernimmt schlussendlich auch das endg├╝ltige Speichern der Datei am in der Formularkonfiguration festgelegten Ort.

Ung├╝nstige Servereinstellungen

Ung├╝nstige Servereinstellungen k├Ânnen beim Hochladen von Dateien zu Fehlern f├╝hren.

Diese Einstellungen werden in der php.ini gemacht.

Jeder Server hat Einstellungen, die unter anderem regeln:

  • wie gro├č die Gesamtdatenmenge, die mit einem POST ├╝bertragen werden, maximal sein darf,
  • wie gro├č eine einzelne hochgeladene Datei maximal sein darf,
  • wie viele Daten maximal auf ein mal hochgeladen werden d├╝rfen.

Fehler haben nichts mit Visforms zu tun

Wenn die vom Browser ├╝bermittelten Daten diesen Einstellungen nicht entsprechen, kommt es zu Fehlern. Die Fehler haben nichts mit Visforms oder bestimmten Einstellungen in Visforms zu tun. Insbesondere dann nicht, wenn der Request-Content insgesamt gr├Â├čer ist als der maximal erlaubte Wert f├╝r einen POST. In diesem Fall gehen alle ├╝bertragenen Daten verloren und es wird ein leerer POST ├╝bergeben.

Unm├Âglich ├╝bermittelte Formulardaten wieder anzuzeigen

Dann ist es zum Beispiel nicht m├Âglich, bereits ├╝bermittelte Formulardaten wieder anzuzeigen. Das soll aber geschehen, wenn Visforms das Formular noch einmal vorlegt, weil die ├╝bermittelten Daten die Validierung auf dem Server nicht bestanden haben. Und dies ist ja auch sehr wahrscheinlich, weil die Daten ja fehlen.

Security Token fehlt

Auch der mit dem POST ├╝bergebene Security Token fehlt dann. Das kann dazu f├╝hren, dass die Meldung “Invalid Token” erscheint und das Formular nicht korrekt verschickt wird.

Einstellungen in der php.ini

Die folgenden Einstellungen der php.ini sind von besonderem Interesse:

  • upload_max_filesize: Diese Einstellung legt fest, wie gro├č eine einzelne hochgeladene Datei maximal sein darf.
  • post_max_size: Diese Einstellung legt fest, wie gro├č die Gesamtdatenmenge, die mit dem Formular ├╝bertragen wird, sein darf.
    Diese ergibt sich aus der Summe der Gr├Â├če aller mit dem Formular hochgeladener Dateien.
    Also wenn das Formular mehr als ein Upload-Feld enth├Ąlt plus der Gr├Â├če aller anderen mit dem Formular ├╝bertragenen Daten.
    Dazu geh├Âren auch die variablen Texte aus den Eingabefeldern.

Die Formularkonfiguration muss sich an die Server Einstellungen anpassen.

Die php.ini Einstellungen haben immer Vorrang vor Einstellungen, die Sie in der Formularkonfiguration festlegen. Angenommen Sie erlauben in einem Formular, dass bis zu 5 MB gro├če Dateien hochgeladen werden d├╝rfen. In der php.ini Ihrer Webseite steht aber ein upload_max_filesize von 4 MB. Dann kann keine Datei, die gr├Â├čer als 4 MB ist, hochgeladen werden. Jeder derartige Versuch f├╝hrt zu einem Fehler.

Bitte stellen Sie deshalb immer sicher, dass die Einstellungen, die Sie in der Formularkonfiguration bez├╝glich der erlaubten Gr├Â├če von Upload-Dateien vornehmen mit den Einstellungen in Ihrer Serverkonfiguration zusammen passen. Angenommen Sie haben 3 Upload Felder in Ihrem Formular. Dann sollte die erlaubte Dateigr├Â├če, die Sie in Visforms festlegen, kleiner als 1/3 von post_max_size sein.

Visforms validiert browserseitig, dass die Gr├Â├če jedes einzelnen Upload-Files

  • unterhalb der “upload_max_filesize” und
  • unterhalb der im Formular festgelegten maximalen Dateigr├Â├če liegt. Andernfalls verhindert Visforms, dass ein Formular mit zu gro├čen Dateien abgeschickt werden kann.

Server Einstellungen ermitteln

Sie k├Ânnen in der Administration Ihrer Webseite und System -> Systeminformationen unter dem Reiter “PHP-Informationen” herausfinden, welche Werte f├╝r Ihre Webseite festgelegt wurden.

Server Einstellungen anpassen

Viele Provider erlauben es Ihnen, die in der php.ini festgelegten Werte f├╝r diese Parameter zu ├╝berschreiben. Das kann etwa in einer .htaccess Datei oder in einer eigenen php.ini Datei erfolgen. Falls Ihnen die Werte in Ihrer Serverkonfiguration zu gering sind, fragen Sie bitte bei Ihrem Provider nach, ob und wie ├änderungen m├Âglich sind.