[HowTo]: Limit für den Dateiupload in der Download MOD/Extension einstellen

News, Hilfestellungen und Tipps zu den in diesem Forum bereitgestellten MODs
Antworten
Benutzeravatar
oxpus
Chief handy-man
Beiträge: 2398
Registriert: Do 13. Dez 2007, 23:06
Wohnort: Irgendwo im I-Net
Kontaktdaten:

[HowTo]: Limit für den Dateiupload in der Download MOD/Extension einstellen

Beitrag von oxpus » So 27. Sep 2015, 09:56

Einleitung:
Die Download MOD (bis phpBB 3.0.x) und Download Extension (ab phpBB 3.1.x) bieten an, Dateien direkt hochzuladen, um einen Download zu erstellen.
Alternativ kann man eine Datei auch per FTP hochladen und im ACP diese in einem Download angeben. Dazu sollte man unbedingt die Online Hilfe für die Datei anschauen, um die betreffende Datei im richtigen Ordner hochzuladen und welche Angaben man dann im ACP vornehmen muss, damit die MOD/Extension die Datei auch korrekt verarbeiten kann.

Ein Limit für den Dateiupload?
Zum direkten Upload über das Formular in der MOD/Extension bedarf es jedoch noch etwas Hintergrundwissene, um das dort angezeigte Limit, wie groß eine hochzuladene Datei maximal sein darf, zu verstehen.

Der Hintergrund
Mit der Installation des Interpreters PHP, mit dem die Seiten eines Forums und auch die der MODs/Extensions erstellt werden, werden auch verschiedene Limits und Einstellungen vorgenommen, die PHP verwendet und den Interpreter dazu auch limitiert.
Dabei werden zwei wichtige Parameter voreingestellt, die den Dateiupload in der Download MOD/Extension direkt betreffen:

"post_max_size" = Standardwert 8 Megabyte (8M), 0 hebt das Limit komplett auf (Vorsicht: Das kann bei falscher Verwendung den gesamten Server anhalten!)
"upload"max_filesize" = Standardwert 2 Megabyte (2M)

Was bewirken diese beiden Parameter?
"post_max_size" beinhaltet das Limit, welchen Datenumfang PHP mit einem abgesendeten HTML-Formular erhält und verarbeiten darf. Dabei sind alle Daten gemeint, die mit einem Formular abgesendet werden, also auch dort angegebene Dateien zum Upload.
"upload_max_filesize" hingegen, man kann es jetzt schon vermuten, limitiert die Dateigröße, die in einem Formular hochgeladen werden kann. Aber auch nur je Datei. Man könnte also auch mehrere Dateien gleichzeitig hochladen, dann käme aber das LImit "post_max_size" wieder zum tragen und die Anzahl gleichzeitig hochzuladener Dateien wird dazu auch mit dem PHP-Parameter "max_file_uploads" begrenzt (Standard 20 Dateien pro Upload).
Dateien die größer sind, als das mit "upload_max_filesize" eingestellte Limit, werden zwar hochgeladen, stehen aber PHP nicht zur Verfügung, da diese, wenn die Dateigröße über das eingestellte Limit liegt, verworfen werden.

Anders herum: Das Limit in "upload_max_filesize" bezieht sich auf die Größer jeder einzelenen hochzuladenen Datei, "post_max_size" auf den Datenumfang des gesamten Formulars inkl. der Datei(en), also inkl. dem Limit "upload-max-filesize" x "max_file_uploads".

Zur Verdeutlichung ein paar Beispiele:
Belassen wir die PHP-Einstellungen mal auf den Standardwerten
"post_max_size" = 8M
"upload_max_filesize" = 2M
"max_file_uploads" = 20

Variante 1:
Es sollen 2 Dateien zu je knapp 2 MB hochgeladen werden (Vorsicht: Die Dateigröße unter Windows und Linux können für PHP voneinander abweichen!).
Dabei erhalten der Server und PHP 2 x 2 MB von den Dateien und (sagen wir mal) 100 KB aus weiteren Feldern in dem Formular.
Das entspricht also ca. 4,1-4,5 POST-Daten (etwas "Overhead" ist auch noch dabei), also PHP kann in diesem Fall alles verarbeiten.
Denn:
"max_file_uploads" erlaubt 20 Dateien, 2 wurden nur hochgeladen = okay
"upload_max_filesize" erlaubt 2 MB je Datei, jede Datei hatte (knapp) 2 MB = okay
"post_max_size" begrenzt alles zusammen auf 8 MB, 4 MB Dateien und etwas dazu aus dem Formular wurde hochgeladen = okay.

Variante 2:
Nun erfolgt ein Upload von 6 Dateien zu je 1,5 MB = 9 MB Gesamtupload.
Nun die Rechnung:
"max_file_uploads" erlaubt 20 Dateien, 6 wurden nur hochgeladen = okay
"upload_max_filesize" erlaubt 2 MB je Datei, jede Datei hatte nur 1,5 MB = okay
"post_max_size" begrenzt alles zusammen auf 8 MB, 9 MB Dateien und etwas dazu aus dem Formular wurde hochgeladen = Fehler.

Jetzt kann es passieren, dass PHP nun alle Daten nicht erhält und abbricht oder zumindest die Dateien nicht alle hochgeladen werden können, da das Gesamtvolumen über dem Parameter "post_max_size" liegt. Das hängt auch etwas von der PHP-Version und weiteren Diensten wie dem Webserver ab und lässt sich nicht pauschal beschreiben.
Es droht also so oder so ein Datenverlust oder eine Fehlermeldung, wenn mindestens eines der beschrieben Limits beim Absenden eines Formulars inkl. Dateiupload überschritten werden.

Und jetzt? Wie kann man das nun ändern?
Da diese Limits allesamt in der php.ini eingestellt werden, muss man diese anpassen.
Hat man einen Server gemietet, den man selber verwalten kann, lässt sich PHP auch selber anpassen. Genau so unter WIndows, wo man das im PHP-Ordner oder unter der Paket-Verwaltung wie für XAMPP auch selber einstellen kann.
Wo die verwendete php.ini nun genau zu finden ist, wird im Forum angezeigt, wenn man im Administrations Bereich (ACP) das Modul "PHP-Information" aufruft.
Dort wird gleich im ersten Block angezeigt, welche php.ini verwendet wird und diese wäre dann auch zu ändern.

Anders sieht es aus, wenn man keinen ganzen Server, sondern als Beispiel nur einen Webspace (also einen Teilbereich) gemietet hat. Auch bei sogenannten "Managed Servern" lässt der Hoster das nicht immer zu.
Hier kann man entweder seinen Hoster fragen, die PHP-Parameter zu ändern (was nicht selten abgelehnt wird) oder der Hoster hat diese Möglichkeit in der Serververwaltung (also Oberflächen wir Plesk, Configxx, Webmin, KIS oder ähnliches) eingebunden, um PHP für den eigenen Bereich anpassen zu können.

Fazit:
Dort und also nur in der php.ini ist also das in der Download MOD/Extension angezeigte Dateilimit einstellbar, denn diese LImits können nicht durch die MOD/Extension geändert werden!

Hinweis zum Schluss
Wenn man die Parameter in der php.ini selber per Editor auf dem eigenen Server ändert, muss man zwangsweise immer den Webserver (in der Regel Apache) neu starten.
Der Apache lässt sich auf der Server Shell mittels "apache2ctl restart" neu starten.
Bei anderen Servern bitte die entsprechende Dokumentation einsehen, bzw. im Internet dazu nachschlagen.
Karsten Ude

Kein Support zu unaufgeforderten PN's, Email oder via Messenger!

Antworten