Warum erlaubt PHP keinen Datei-Upload größer als 2 MB?
\nHaben Sie jemals versucht, ein hochwertiges Foto, eine Präsentation oder ein Video auf eine Website hochzuladen, und PHP antwortete trocken: „The uploaded file exceeds the upload_max_filesize directive in php.ini“? Kommt Ihnen bekannt vor? Dies ist ein klassisches Problem, das in fast jedem zweiten Projekt auftritt. Auf Stack Overflow hat die Frage „Change the maximum upload file size“ Zehntausende von Aufrufen – und das nicht ohne Grund.
\nIn diesem Artikel analysieren wir, wie die Upload-Begrenzung in PHP funktioniert, wo sie konfiguriert wird und wie Sie das Limit korrekt erhöhen. Sie erfahren nicht nur etwas über upload_max_filesize, sondern auch über Fallstricke, die alle Bemühungen zunichte machen können.
Wie begrenzt PHP Datei-Uploads?
\nWenn Sie eine Datei über ein Formular senden, prüft PHP deren Größe auf mehreren Ebenen. Wenn auch nur eine Ebene nicht durchlässt, wird die Datei nicht hochgeladen. Lassen Sie uns die drei wichtigsten Parameter durchgehen, die Sie ändern müssen, damit change the maximum upload file size richtig funktioniert.
\n\n1. upload_max_filesize – Direktes Limit pro Datei
\nDies ist der offensichtlichste Parameter. Er legt die maximale Größe einer einzelnen hochladbaren Datei fest. Standardmäßig steht in PHP 2M (2 Megabyte). Um es beispielsweise auf 100 MB zu erhöhen, müssen Sie schreiben:
upload_max_filesize = 100M\n\n2. post_max_size – Größe der gesamten POST-Anfrage
\nHier tappen viele in die Falle. Selbst wenn Sie upload_max_filesize erhöht haben, aber post_max_size vergessen haben, wird der Upload trotzdem nicht funktionieren. Warum? Weil die Datei innerhalb der POST-Anfrage übertragen wird. Wenn die Größe der gesamten Anfrage das Limit überschreitet, kürzt PHP sie einfach ab.
Die Regel ist einfach: post_max_size muss größer sein als upload_max_filesize. Üblicherweise setzt man es 20-30% höher an. Beispiel:
post_max_size = 120M\n\n3. max_execution_time – Zeit für den Upload
\nGroße Dateien werden nicht sofort hochgeladen. Wenn die Datei 100 MB wiegt und die Internetverbindung langsam ist, könnte das Skript die vorgegebene Zeit überschreiten. Standardmäßig beträgt max_execution_time = 30 Sekunden. Für große Dateien erhöhen Sie sie auf 300-600 Sekunden:
max_execution_time = 600\n\n4. memory_limit – Speicher für die Verarbeitung
\nEinige PHP-Skripte laden die Datei vor der Verarbeitung in den Arbeitsspeicher. Wenn memory_limit kleiner als die Dateigröße ist, erhalten Sie einen Fehler. Es wird empfohlen, es größer als post_max_size zu setzen:
memory_limit = 256M\n\nWo und wie ändert man die Einstellungen?
\nNachdem wir nun wissen, welche Parameter für change the maximum upload file size verantwortlich sind, schauen wir uns an, wo sie geändert werden. Sie haben drei Hauptmöglichkeiten:
\n\nMethode 1: php.ini (Hauptkonfigurationsdatei)
\nDies ist die zuverlässigste Methode. Finden Sie die Datei php.ini auf dem Server (normalerweise in /etc/php/ oder /usr/local/etc/). Öffnen Sie sie und suchen Sie die benötigten Direktiven. Wenn sie nicht vorhanden sind, fügen Sie sie am Ende der Datei hinzu:
; Datei-Uploads erlauben (sollte On sein)\nfile_uploads = On\n\n; Maximale Größe einer einzelnen Datei\nupload_max_filesize = 100M\n\n; Maximale Größe der POST-Anfrage\npost_max_size = 120M\n\n; Skript-Ausführungszeit\nmax_execution_time = 600\n\n; Speicherlimit\nmemory_limit = 256M\nStarten Sie nach den Änderungen unbedingt den Webserver neu:
\nsudo service apache2 restart # für Apache\nsudo service nginx restart # für Nginx\n\nMethode 2: .htaccess (nur für Apache)
\nWenn Sie keinen Zugriff auf php.ini haben (z. B. bei einem Hosting), können Sie es über .htaccess im Stammverzeichnis der Website versuchen:
php_value upload_max_filesize 100M\nphp_value post_max_size 120M\nphp_value max_execution_time 600\nphp_value memory_limit 256M\nWichtig: Diese Methode funktioniert nur