Dateiuploads
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 Upload File Control
Das Control, das bei einem Upload Feld im Formular angezeigt wird, besteht aus einem Button, mit dessen Hilfe eine Datei, die hochgeladen werden soll, auf dem lokalen Rechner ausgewählt werden kann. Weiterhin hat das Control einen Bereich, in dem der Dateiname der hochzuladenden Datei angezeigt wird, nachdem diese mit Hilfe des Buttons ausgewählt wurde.
Keine Übersetzung des Buttontexts
Das Control wird vom Browser erzeugt und kann 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 z.B. eine mehrsprachige Joomla! Webseite haben und die Sprache ändern. Die Sprache des Button-Texts ist immer in der Sprache des Browsers (die durch das Betriebssystem festgelegt wird oder bei der Browserinstallation gewählt wurde) und kann mit Visforms nicht beeinflusst werden.
Der Wert des Controls kann nicht programmatisch gesetzt werden
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 und nicht programmatsich (z.B. mit Javascript). Das liegt daran, dass der Browser im Hintergrund eine Menge Arbeiten rund um die hochzuladende Datei ausführt - die nicht ausgeführt würden, wenn nur der Dateiname programmatisch gesetzt würde - und Informationen speichert, die er für den Upload benutzt. Wie diese Arbeiten ausgeführt werden sind Browserinterna, gegen die nicht programmiert werden kann. Das ist der Grund dafür, warum ein Upload-Feld immer leer ist, wenn das Formular noch einmal vorlegt wird, weil bereits übermittelte Daten die Validierung auf dem Server nicht bestanden haben, auch wenn andere vom Benutzer bereits eingegebenen Informationen wieder angezeigt werden.
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 hochzuladenden Datei wie alle anderen Daten, die mit einem Formular übertragen werden auch, an den Server übermittelt werden. Hierzu werden die Daten, aus denen die hochzuladende Datei ja letztlich besteht, verpackt 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, z.B. Visforms, zu entscheiden, was weiter mit der temporären Datei geschieht. Hierzu gehört sowohl eine gründliche Validierung der Datei (entsprechend den Vorgaben in der Formularkonfiguration bzgl. Größe, Dateierweiterung und entsprechend den Joomla! Standards bezüglich der Frage ob die Datei evtl. gefährliche Inhalte enthält) als auch das endgültige Speichern der Datei am in der Formularkonfiguration festgelegten Ort.
Ungünstige Servereinstellungen können beim Hochladen von Dateien zu Fehlern führen
Jeder Server hat Einstellungen, die 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 und so weiter. Diese Einstellungen werden in der php.ini gemacht. Wenn die vom Browser übermittelten Daten diesen Einstellungen nicht entsprechen, kommt es zu Fehlern, die nichts mit Visforms (oder Einstellungen in Visforms) zu tun haben. Insbesondere wenn der Request Content insgesamt größer ist als der maximal erlaubte Wert für den Post, dann gehen alle übertragenen Daten verloren und es wird eine leerer Post übergeben. In diesem Fall ist es zum Beispiel nicht möglich, übermittelte Formulardaten noch einmal anzuzeigen, wenn Visforms das Formular noch einmal vorlegt, weil die übermittelten Daten die Validierung auf dem Server nicht bestanden haben (und dies ist sehr wahrscheinlich, weil die Daten ja fehlen). Auch der mit dem Post übergebene Security Token fehlt dann, was z.B. dazu führen kann, dass die Meldung "Invalid Token" ausgegeben wird anstatt dass das Formular korrekt verschickt wird.
Insbesondere sind folgenden Einstellungen der php.ini von 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 (also die Texte aus den Eingabefeldern).
Die Formularkonfiguration muss sich an die Server Einstellungen anpassen
Diese php.ini Einstellungen haben immer Vorrang vor Einstellungen, die Sie in der Formularkonfiguration festlegen, d.h. auch wenn Sie in einem Formular erlauben, dass bis zu 5MB große Dateien hochgeladen werden dürfen, die php.ini Ihrer Webseite aber ein upload_max_filesize von 4MB hat, dann kann eine Datei, die größer als 4MB ist nicht hochgeladen werden und der Versuch führt zu Fehlern. 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 passt. Haben Sie mehr als ein Upload Feld in Ihrem Formular, z.B. 3, 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, und verhindert, dass Formulare mit zu großen Dateien abgeschickt werden können.
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, z.B. in einer .htaccess Datei oder in einer eigenen php.ini Datei. Falls Ihnen die Werte in Ihrer Serverkonfiguration zu gering sind, fragen Sie bitte bei Ihrem Provider nach, ob und wie dies möglich ist.