HOWTO · PHP
Maximale Upload-Größe in PHP
Der heutige Beitrag behandelt die maximale Upload-Größe in PHP.
Auf dieser Seite
Um größere Uploads zu ermöglichen, erhöhen Sie PHPs Limit pro Datei upload_max_filesize und setzen Sie post_max_size hoch genug für die gesamte Anfrage. Ermitteln Sie zunächst, welche PHP-Konfiguration der Prozess verwendet, der den Upload verarbeitet. Wenden Sie die Einstellungen dort an und prüfen Sie sie über denselben Prozess. Speicherort und erforderliches Neuladen hängen davon ab, wie PHP installiert und gehostet wird.
Aktive PHP-Konfiguration ermitteln
PHP kann Einstellungen aus php.ini laden. Die von PHP auf der Kommandozeile verwendete Datei kann sich von der Datei unterscheiden, die ein Webserver oder PHP-FPM nutzt. Prüfen Sie die Konfiguration des PHP-Prozesses, der den Upload entgegennimmt. Für PHP auf der Kommandozeile zeigt php --ini die geladene Konfigurationsdatei an. Bei einer Webanfrage kann ein temporäres Skript, das php_ini_loaded_file() aufruft, die geladene Datei ermitteln. Entfernen Sie dieses Skript nach der Prüfung, damit Konfigurationsdetails nicht öffentlich zugänglich bleiben.
php.ini enthält üblicherweise Einstellungen für eine PHP-Installation oder Laufzeitumgebung. Einige Webserver-Konfigurationen erlauben außerdem Verzeichnisüberschreibungen über .htaccess; ob das möglich ist, hängt jedoch vom Server und seiner PHP-Anbindung ab. PHP selbst stellt .htaccess nicht bereit, und ein Hosting-Anbieter kann Überschreibungen deaktivieren. Wenn Sie keinen Zugriff auf die betreffende Datei oder den Dienst haben, nutzen Sie das Hosting-Kontrollzentrum oder fragen Sie die Administration, welche Einstellungen geändert werden können.
upload_max_filesize festlegen
Diese Direktive begrenzt die Größe einer einzelnen hochgeladenen Datei. Bearbeiten Sie die aktive Konfiguration und wählen Sie einen Wert, der zur größten Datei passt, die Sie annehmen möchten. Zum Beispiel legt upload_max_filesize = 32M ein Limit von 32 Megabyte pro Datei fest. PHP-Größenangaben verwenden häufig K, M oder G. Wählen Sie einen Wert, den Ihre PHP-Konfiguration und Ihr Hosting unterstützen. Gehen Sie nicht davon aus, dass ein Beispielwert dem aktuellen Standard entspricht oder dass eine Änderung für alle PHP-Laufzeitumgebungen auf dem Server gilt.
post_max_size für die gesamte Anfrage festlegen
post_max_size begrenzt den gesamten HTTP-Anfragekörper einschließlich Multipart-Formulardaten und weiterer Dateien in der Anfrage. Setzen Sie den Wert höher als upload_max_filesize, damit Platz für Formularfelder und den Multipart-Overhead bleibt. Bei einem Dateilimit von 32 Megabyte bietet beispielsweise ein Anfragelimit von 40M etwas Spielraum. Ist das Anfragelimit zu niedrig, stellt PHP die hochgeladene Datei der Anwendung möglicherweise nicht zur Verfügung, obwohl sie selbst kleiner als upload_max_filesize ist. memory_limit ist keine zwingende Obergrenze für diese beiden Einstellungen; der Speicherbedarf hängt davon ab, was die Anwendung mit dem Upload macht.
Änderungen anwenden
Speichern Sie die Konfigurationsdatei oder Überschreibung, die für den PHP-Prozess gilt, der die Uploads verarbeitet. Je nach Hosting-Umgebung werden Änderungen sofort wirksam oder erfordern ein Neuladen beziehungsweise einen Neustart des Webservers, von PHP-FPM oder eines anderen PHP-Dienstes. Folgen Sie dem Verfahren Ihrer Hosting-Umgebung. Für einen neuen Aufruf über die Kommandozeile muss PHP nicht neu gestartet werden; bei dauerhaft laufenden Diensten kann dagegen ein Neuladen nötig sein. Bei Shared Hosting müssen Sie Werte möglicherweise im Kontrollzentrum des Anbieters ändern, statt eine Serverdatei zu bearbeiten.
Wirksame Limits prüfen
Prüfen Sie beide Werte in derselben Umgebung, die die Uploads verarbeitet. Ein kurzes PHP-Skript kann anzeigen, welche Werte dieser Prozess verwendet:
Dieses Beispiel ist in sich geschlossen; seine Ausführung wurde in diesem Paket nicht überprüft. Der unveränderte Code gibt beide wirksamen Werte aus; die Bezeichnungen bleiben dabei auf Englisch.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
<?php
foreach (['upload_max_filesize', 'post_max_size'] as $name) {
echo $name, '=', ini_get($name), PHP_EOL;
}
Führen Sie das Skript über die betreffende Web-Laufzeitumgebung aus, um die Web-Einstellungen zu prüfen. Ein Aufruf im Terminal prüft stattdessen PHP auf der Kommandozeile. Entfernen Sie eine temporäre Diagnoseseite anschließend. Wenn die angezeigten Werte unverändert sind, vergewissern Sie sich, dass Sie die geladene Konfiguration bearbeitet und die Änderungen beim richtigen Dienst angewendet haben.
Uploads beheben, die weiterhin fehlschlagen
Wird ein Upload abgelehnt, vergleichen Sie die Dateigröße mit upload_max_filesize und die Größe der gesamten Anfrage mit post_max_size. Eine Fehlermeldung wie „The uploaded file exceeds the upload_max_filesize directive in php.ini“ weist auf das PHP-Limit pro Datei hin; der genaue Wortlaut kann abweichen. Ist das angezeigte Limit weiterhin zu niedrig, prüfen Sie, ob Sie die geladene Datei bearbeitet und den betreffenden Dienst neu geladen haben. Meldet PHP die gewünschten Werte, kann eine andere Ebene ein niedrigeres Limit festlegen, etwa der Webserver, ein Proxy, die Hosting-Plattform oder eine Anwendungsregel. Prüfen Sie deren Einstellungen und Protokolle und fragen Sie beim Hosting-Anbieter nach, wenn sich die Limits nicht konfigurieren lassen. Das Anfragelimit sollte über dem Dateilimit liegen. Testen Sie den Upload erneut über dieselbe Route und PHP-Laufzeitumgebung, die auch echte Uploads verarbeitet.