PHP Upload Limits: post_max_size und upload_max_filesize richtig setzen

In PHP-Webanwendungen spielt die korrekte Konfiguration von Upload-Limits eine zentrale Rolle für die Performance, Sicherheit und Benutzerfreundlichkeit. Die Direktiven post_max_size und upload_max_filesize bestimmen, wie groß POST-Daten und hochgeladene Dateien maximal sein dürfen. In diesem Tutorial erfahren Einsteiger, IT-Studierende und Junior Network Engineers praxisnah, wie diese Werte sinnvoll gesetzt werden, welche Wechselwirkungen zu beachten sind und wie man typische Fehler vermeidet.

Grundlagen der PHP Upload Limits

Die beiden wichtigsten Direktiven in der php.ini sind:

  • upload_max_filesize: Legt die maximale Größe einer einzelnen hochgeladenen Datei fest.
  • post_max_size: Bestimmt die maximale Größe aller POST-Daten zusammen, inklusive Dateien und Formulardaten.

Es gilt die Regel: post_max_size muss immer größer oder gleich upload_max_filesize sein, da POST-Daten neben der Datei auch weitere Formularelemente enthalten können.

Beispiel für die Einstellung in php.ini

upload_max_filesize = 10M
post_max_size = 12M

Praktische Empfehlungen für Web-Apps

Die optimale Einstellung hängt von der Art der Anwendung ab:

  • Für kleine Formulare, z. B. Kontaktseiten: upload_max_filesize = 2M, post_max_size = 3M
  • Für CMS mit Medienuploads (WordPress, Drupal): upload_max_filesize = 50M, post_max_size = 55M
  • Für File-Sharing-Anwendungen: Abhängig von Speicher- und Bandbreitenlimits, ggf. upload_max_filesize = 500M, post_max_size = 510M

Zusammenhang mit anderen PHP-Direktiven

  • memory_limit: Muss ausreichend hoch sein, damit PHP die hochgeladenen Dateien verarbeiten kann.
  • max_execution_time: Lange Uploads benötigen ausreichend Zeit, sonst bricht der Upload ab.
  • max_input_time: Legt fest, wie lange PHP Eingabedaten wie POST-Daten lesen darf.

Upload-Limits per .htaccess oder Nginx setzen

In Shared Hosting-Umgebungen oder wenn kein Zugriff auf die php.ini besteht, lassen sich Limits alternativ in .htaccess oder in Nginx setzen.

.htaccess Beispiel

php_value upload_max_filesize 20M
php_value post_max_size 25M

Nginx + PHP-FPM Beispiel

server {
    ...
    client_max_body_size 25M;
    ...
}

Beachten Sie: client_max_body_size begrenzt die POST-Größe auf Nginx-Ebene, unabhängig von PHP-Direktiven.

Fehler vermeiden und Debugging

Typische Probleme bei falschen Limits:

  • Fehler 413 Request Entity Too Large – Nginx lehnt die POST-Daten ab
  • Leere $_FILES-Arrays bei Überschreitung von upload_max_filesize
  • Unterschiedliche Werte in CLI- und FPM-Umgebungen – prüfen Sie phpinfo()

PHP Debugging-Beispiel

<?php
echo '<pre>';
print_r(ini_get('upload_max_filesize'));
print_r(ini_get('post_max_size'));
echo '</pre>';
?>

Zusätzliche Tipps für produktive Webserver

  • Setzen Sie Limits nicht zu hoch, um DOS-Angriffe zu vermeiden.
  • Kombinieren Sie PHP-Limits mit Webserver-Limits (Nginx: client_max_body_size, Apache: LimitRequestBody).
  • Bei mehreren PHP-Versionen prüfen Sie die korrekte php.ini für FPM, CLI und Apache-Modul.
  • Logs überprüfen: Fehler bei zu großen Uploads erscheinen in error_log.

Praxisbeispiel: WordPress Upload Limit erhöhen

# php.ini
upload_max_filesize = 64M
post_max_size = 70M
memory_limit = 128M

Nginx

client_max_body_size 70M;

Optional .htaccess

php_value upload_max_filesize 64M
php_value post_max_size 70M

Nach Änderungen unbedingt den Webserver oder PHP-FPM neu starten:

sudo systemctl restart php8.1-fpm
sudo systemctl restart nginx

Zusammenfassung der Best Practices

  • post_max_size ≥ upload_max_filesize
  • Memory-Limit ausreichend hoch setzen
  • Webserver-Limits (Nginx/Apache) anpassen
  • Fehlerlogs prüfen und Debugging durchführen
  • Limitwerte je nach Anwendung anpassen (kleine Formulare vs. Medienuploads)

Mit korrekten Einstellungen von upload_max_filesize und post_max_size lassen sich Upload-Fehler vermeiden, Webserver stabil betreiben und Sicherheitsrisiken durch zu große POST-Daten minimieren. Dies ist ein essenzieller Schritt für Einsteiger und Junior Network Engineers, um professionelle Webanwendungen auf Linux-Servern zuverlässig zu betreiben.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles