Ändern Sie die maximale Größe der Upload-Datei

513

Ich habe eine Website auf einem PC gehostet, auf den ich keinen Zugriff habe. Ich habe ein Upload-Formular, mit dem Leute MP3-Dateien mit einer Größe von bis zu 30 MB hochladen können. Mein serverseitiges Skript wird in PHP erstellt.

Jedes Mal, wenn ich versuche, eine Datei hochzuladen, wird eine Fehlermeldung angezeigt, dass die Datei die maximal zulässige Größe überschreitet. Daher muss ich die Größe erhöhen. Meine Recherchen im Internet haben ergeben, dass die .htaccessDatei geändert wird, auf die ich keinen Zugriff habe, sodass dies nicht funktioniert. Andere schlugen vor, dass ich php.inimeinem Stammverzeichnis eine benutzerdefinierte Datei hinzufügen sollte, die nicht funktionierte. Irgendwelche anderen Vorschläge?

Yo Mama
quelle

Antworten:

877

Sie müssen den Wert von upload_max_filesizeund post_max_sizein Ihrer php.ini festlegen:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

Nach dem Ändern der php.ini-Datei (en) müssen Sie Ihren HTTP-Server neu starten, um die neue Konfiguration zu verwenden.

Wenn Sie Ihre php.ini nicht ändern können, haben Sie kein Glück. Sie können diese Werte zur Laufzeit nicht ändern. Das Hochladen von Dateien, die größer als der in php.ini angegebene Wert sind, ist fehlgeschlagen, wenn die Ausführung Ihren Aufruf erreicht ini_set.

Siehe die Beschreibung der Kernanweisungen von php.ini .

meagar
quelle
4
Kennen Sie vielleicht die Standardroute, auf der die Datei php.ini gespeichert ist?
Yo Momma
1
Unter Linux ist es normalerweise in / etc / php / oder so ähnlich. Wenn Sie sich auf einem gemeinsam genutzten Server befinden, haben Sie kein Glück, es sei denn, Ihr Hosting-Anbieter ist großzügig genug, um eine php.ini-Datei pro Benutzer bereitzustellen.
Johannes Gorset
4
Wenn Sie WAMP unter Windows verwenden, können Sie es bearbeiten, indem Sie auf das WAMP-Symbol> PHP -> php.ini klicken. In Debian befindet sich meine Konfigurationsdatei in / etc / php5 / apache2.
Meagar
19
Ich schlage vor, eine höhere Größe einzustellen post_max_size. Die Gesamtgröße der geposteten Felder ist möglicherweise höher als die Dateigröße. Wenn Sie also den Randfall haben, dass jemand eine 40-MB-Datei hochlädt, schlägt dies aufgrund einer Überschreitung fehl post_max_size.
Acme
2
Bitte beachten Sie, dass memory_limit auch die Upload-Größe begrenzt.
Daniel
151

Sie können es über eine .htaccessDatei ändern .

.htaccessDateien werden im selben Verzeichnis wie Ihre .phpDateien gespeichert. Sie ändern die Konfiguration für diesen Ordner und alle Unterordner. Sie verwenden sie einfach, indem Sie eine .htaccessDatei in einem Verzeichnis Ihrer Wahl erstellen (oder ändern, falls vorhanden).

Folgendes sollte es Ihnen ermöglichen, Ihr Upload-Limit zu erhöhen (wenn der Serveranbieter Änderungen an der PHP-Konfiguration über zulässt .htaccess).

php_value upload_max_filesize 40M
php_value post_max_size 42M
Andrew Moore
quelle
3
Es scheint, dass es nicht immer funktioniert. Auf meinen Entwicklungsmaschinen hat das Setzen des entsprechenden Werts in .htaccess den Job erledigt. Auf dem gemeinsam genutzten Hosting funktioniert diese Einstellung jedoch nicht. Die Fehlermeldung zeigt jedoch an, dass die maximal zulässige Upload-Größe der Wert ist, den ich in .htaccess festgelegt habe. Es passiert also eine sehr seltsame Situation.
Eugeniu Torica
5
Das Hinzufügen in .htaccess funktioniert anscheinend nur, wenn Sie Apache ausführen. Probieren Sie es aus und funktioniert gut für mich.
AngelGris
Dies funktioniert nicht, wenn diese 2 Zeilen in der php.ini nicht kommentiert wurden:; Name für benutzerdefinierte php.ini-Dateien (.htaccess). Standard ist ".user.ini" ;user_ini.filename = ".user.ini" ; Um diese Funktion zu deaktivieren, setzen Sie diese Option auf leeren Wert;user_ini.filename =
Alan Deep
Beachten Sie, dass bei Verwendung von Apache CGI oder Fast CGI 500 Fehler auftreten. Wickeln Sie dies in <IfModule mod_php7.c> </ IfModule>
Shardj
59

Ich hatte das gleiche Problem und habe eine .user.ini-Datei erstellt und in das Verzeichnis gestellt, in dem sich das Upload-Skript befindet. Als in dieser Datei setze ich diese zwei Werte:

  upload_max_filesize = 40M

  post_max_size = 40M

und es hat super für mich funktioniert!

user1641252
quelle
2
Großartig. Funktioniert auch mit aktiviertem Fastcgi. Benötigt PHP5.3 oder neuer.
Ciantic
1
Ok, dies funktionierte auf einem gemeinsam genutzten Server, wenn nichts anderes funktionieren würde. Toller Fund.
Edward Potter
55

Sie können auch die Funktion ini_set verwenden (nur für PHP-Versionen unter 5.3):

ini_set('post_max_size', '64M');
ini_set('upload_max_filesize', '64M');

Wie @acme sagte, sind diese Einstellungen in PHP 5.3 und höher PHP_INI_PERDIR-Direktiven, sodass sie nicht mit ini_set festgelegt werden können. Sie können stattdessen user.ini verwenden.

Manjar
quelle
38
In neueren PHP-Versionen sind diese INI-Einstellungen nur PHP_INI_PERDIR , sodass Sie sie nicht in Ihrem Skript festlegen können. Sehen Sie hier für weitere Details.
Acme
46

Führen Sie zuerst die INI-Datei aus, um sie zu suchen

php -i | grep -i "loaded configuration file"

Öffnen Sie dann die Datei und ändern Sie sie

upload_max_filesize = 2M
post_max_size = 2M

Ersetzen Sie die 2M durch die gewünschte Größe, z. B. 100M.

Ich habe einen Blog-Beitrag über mit ein bisschen mehr Infos auch http://www.seanbehan.com/how-to-increase-or-change-the-file-upload-size-in-the-php-ini- Datei für WordPress

Seanbehan
quelle
5
Es zeigt die Datei als, /etc/php5/cli/php.iniaber meine Konfigurationsdatei ist /etc/php5/apache2/php.ini. Eine Art irreführend.
Fredrick Gauss
Es gibt 2 php.ini-Dateien ... und mit diesem Befehl als Antwort wird angezeigt, welche Sie verwenden! Dort müssen Sie also Änderungen vornehmen, um wirksam zu werden!
Lewis4u
40

Ich habe das gleiche Problem in der Vergangenheit .. und ich habe es durch .htaccessDatei behoben

Wenn Sie Änderungen an der PHP-Konfigration vornehmen .htaccess, sollten Sie Konfigrationen in das IfModuleTag einfügen , da sonst der interne Serverfehler auftritt .

Dies ist ein Beispiel, es funktioniert gut für mich:

<IfModule mod_php5.c>
   php_value upload_max_filesize 40M
   php_value post_max_size 40M
</IfModule>

Und dies ist PHP-Referenz, wenn Sie mehr verstehen wollen. http://php.net/manual/en/configuration.changes.php

Eyad Farra
quelle
5
Vorausgesetzt, Sie haben Override-Funktionen.
AbsoluteƵERØ
3
Um PHP.7 zu unterstützen, fügen Sie denselben Block hinzu mit: <IfModule mod_php7.c>
Mostafa
16

Ich habe dieses Problem behoben, indem ich eine Datei erstellt habe, die .user.iniin dem Verzeichnis aufgerufen wurde, in dem sich die PHP-Dateiskripte befinden (dies bedeutet, dass jedes PHP-Skript in diesem Verzeichnis die neue Dateigrößenbeschränkung erhält).

Der Inhalt von .user.iniwaren:

upload_max_filesize = 40M
post_max_size = 40M
Pearce
quelle
2
Das ist die Lösung für mich. Funktioniert einfach gut. Wenn Sie ein Framework wie Codeignitor verwenden, muss sich ".user.ini" an derselben Stelle befinden wie index.php
The Dude
Vielen Dank. Das funktioniert bei mir. Dies ist ideal für Shared Hosting, bei dem Sie keinen Zugriff auf php.ini haben. Ich möchte nur hinzufügen, dass es seit PHP 5.3 verfügbar ist
yacsha
6

Ich hatte das gleiche Problem. Ich habe drei Wege ausprobiert, die normalerweise vorgeschlagen wurden:

  1. functions.php
  2. php.ini
  3. .htaccess

keine wenn was mein Problem gelöst hat. Ich benutze Godaddy und bin auf eine vorgeschlagene Lösung gestoßen, die war:

  1. Ich bin zu Web Hosting gekommen , dann zu Verwalten
  2. Wählen Sie unter Software die Option PHP-Version auswählen
  3. Wählen Sie Zu PHP wechseln Optionen in der oberen rechten Ecke der Tabelle in der Schriftfarbe Blau
  4. Im untersten Teil haben Sie wahrscheinlich upload_max_filesize = 2M
  5. Jetzt können Sie es ändern
  6. Klicken Sie unbedingt auf die Schaltfläche Speichern !
  7. Gehen Sie nun zu Ihrem wp-admin-Bereich, wählen Sie Medien und dann Hinzufügen

Voila! Jetzt hast du eine andere maximale Upload-Dateigröße :)

nrmb
quelle
6

Oft ist mir aufgefallen, dass Websites mit Shared Hosting keine Änderungen der Einstellungen in php.ini-Dateien zulassen. man kann auch gar nicht erst die .htaaccess-datei kisten. In einer solchen Situation kann man versuchen, folgende Dinge zu tun

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);
Die EasyLearn Academy
quelle
6

Die Antworten sind etwas unvollständig, 3 Dinge, die Sie tun müssen

in php.ini Ihrer PHP-Installation (Hinweis: Je nachdem, ob Sie es für CLI, Apache oder Nginx möchten, finden Sie die richtige php.ini zum Bearbeiten. Für Nginx befindet es sich normalerweise dort, /etc/php/7.1/fpmwo 7.1 von Ihrer Version abhängt. Für Apache normalerweise /etc/php/7.1/apache2)

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

oder andere Werte einstellen. Starten Sie Apache neu / laden Sie es neu, wenn Sie Apache installiert haben, oder php-fpm für nginx, wenn Sie nginx verwenden.

Toskan
quelle
5

Nun, ich möchte hier meine 2 Cent hinzufügen.

Ich verwende Shared Webhosting und habe dieses Problem viele Male angegangen. Ich habe versucht, es selbst zu lösen, aber ohne Erfolg. Schließlich gelang es mir, das Problem zu beheben, indem ich verschiedene Webquellen überprüfte und meinen Hosting-Dienstleister kontaktierte. Meine Fragen lauteten "Wie kann ich den PHP-Wert memory_limitin Shared Webhosting ändern ?", "Wie kann ich den PHP-Wert upload_max_filesizein Shared Webhosting ändern ?", "Wie kann ich den PHP-Wert max_input_varsin Shared Webhosting ändern ?", "Wie kann ich den PHP-Wert max_execution_timein ändern?" Shared Webhosting? "," Wie kann ich den PHP-Wert max_input_timein Shared Webhosting ändern ? " und vieles mehr durch Konfigurieren oder Ändern der php.ini oder der .htaccessDatei. Ich habe versucht, sie zu ändern, aber es traten Probleme auf. Schließlich kontaktierte ich meinen Hosting-Anbieter und es stellte sich heraus, dass ich mein PHP auf native eingestellt habe. Sie haben es auf PHP 5.6 geändert.

"Ihr PHP wurde auf den 'nativen' Modus eingestellt, was bedeutet, dass Sie diese Werte nicht überschreiben können. Ich habe Sie auf '5.6' geändert, damit Sie loslegen können."

Danach habe ich meine Website über FTP Filezilla verbunden. Vergessen Sie auch nicht, sowohl Ihren FTP-Dienst zum Anzeigen versteckter Dateien als auch Ihren lokalen Computer zu verwenden, da die .htaccessDatei in meinem lokalen Laptop und auf meiner Website versteckt war. Es war im Ordner public_html verfügbar. Ich habe es gerade heruntergeladen und die folgenden Codes am Ende der Datei hinzugefügt und dann wieder auf den Server hochgeladen:

php_value memory_limit 256M
php_value post_max_size 256M
php_value upload_max_filesize 64M
php_value max_input_vars 1800
php_value max_execution_time 300
php_value max_input_time 300

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Im Moment funktioniert alles einwandfrei. Wenn einer von Ihnen Probleme hat, schreiben Sie bitte hier und warnen Sie mich, damit ich die oben gezeigten Codes ändern kann. Übrigens lade ich auch einige Bilder hoch, die die Änderung zeigen.

Eine weitere Sache, die ich fast vergessen hätte, die ZipArchive-Installation in Ihrem gemeinsam genutzten Webhosting-Dienst zu erwähnen. Ich habe diese Anforderung zum Aktivieren erfüllt, indem ich einfach über mein Cpanel zu den PHP-Einstellungen gegangen bin, auf die PHP-Auswahlerweiterungen geklickt und dann den Zip-Bereich angekreuzt habe, das ist alles.

Vielen Dank.

PS: Ich bin offen für gute Praktiken, und wenn Sie hier schlechte Praktiken sehen, lassen Sie es mich bitte wissen, ich werde versuchen, sie zu ändern. Vielen Dank.

garakchy
quelle
4

Vielleicht sollte dies ein Kommentar zu @ seanb123 und @Fredrick Gauss sein, der seinen Kommentar kommentiert, aber für mich in Drupal 8.1 mit PHP 7 befand sich hier die Datei, die ich ändern musste:

/etc/php/7.0/apache2/php.ini

Ich habe wahrscheinlich vier andere php.ini-Dateien modifiziert, darunter die von meinem System als "Loaded Configuration File" ( php -i | grep -i "loaded configuration file") bezeichnete und die auf der info.php-Seite gefundene, aber keine davon hat geholfen. Der Schlüssel zum Erkennen des richtigen Pfades wurde ab 2012 auf einer Website gefunden. Sie sagten, der Pfad "/etc/php5/apache2/php.ini"sei bereits zurück veraltet, aber es gab mir einen Hinweis, wo ich ihn finden konnte. Für PHP7 ist es etwas anders als für PHP5, aber das Konzept ist das gleiche.

Vielleicht hilft das einem ansonsten hilflosen Trottel wie mir.

Abgesehen davon wäre die Antwort auf das OP in meinem Fall, dass jemand mit Administratorrechten auf der Box dies tun müsste.

Die Seite, die mir geholfen hat: http://www.evilbox.ro/linux/remove-ispconfig-maximum-upload-size-of-2m-for-wordpress/

Dies wird auch hier angesprochen: Dateigrößenbeschränkung in PHPMyAdmin importieren

EDIT: der vollständige Text meiner Notiz an mich selbst:

Um die maximale Upload-Größe zu ändern, bearbeiten Sie upload_max_filesize und [falls erforderlich?] Post_max_size in /etc/php/7.0/apache2/php.ini (oder in älteren Versionen: /etc/php5/apache2/php.ini).

/etc/init.d/apache2 Neustart

WIEDER BEARBEITEN: Da Sie große Dateien importieren, müssen Sie möglicherweise das Zeitlimit für die Verarbeitung ändern. In meinem Fall wurde die Datei "config.default.php" /usr/share/phpmyadmin/libraries/config.default.phpmit der Variablen gefunden, die $cfg['ExecTimeLimit'] = 300; ich beispielsweise für einen großen Import in 900 geändert habe. Danach müssen Sie Apache neu starten

den Karpfen beschlagnahmen
quelle
3

Keine dieser Lösungen funktioniert für mich !! (standardmäßig bereits auf 32 MB eingestellt). Das Problem ist in den meisten Fällenmax_allowed_packet

Ich arbeite an localhost und benutze MAMP.

Hier sind Lösungen;

1. Wenn Sie nicht haben my.ini

Hinzufügen

--max_allowed_packet=168435456

Zu

...\MAMP\bin\startMysql.sh

2. Wenn Sie my.ini haben

Unter

[mysqld]

Hinzufügen

max_allowed_packet=100M

ERLEDIGT!

ErcanE
quelle
Max_allowed_packet = 128M wurde sowohl zu php.ini als auch zu .user.ini hinzugefügt und das hat es für mich getan!
Molasar
2

Drei Dinge, die Sie überprüfen müssen.

upload_max_filesize, memory_limitundpost_max_size genau in der Konfigurationsdatei php.ini.

Alle diese drei Einstellungen begrenzen die maximale Datengröße, die von PHP übermittelt und verarbeitet werden kann.

In der Regel post_max_sizeund memory_limitmüssen größer sein als upload_max_filesize.


Insgesamt müssen Sie also drei Variablen überprüfen, um absolut sicher zu sein.

Prosti
quelle
2

Damit WAMPist alles ziemlich einfach

WAMP Symbol> PHP> PHP-Einstellungen> upload_max_filesize = nM> n = (2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M, 512M oder Auswählen (benutzerdefiniert)).

Service (s) werden automatisch neu geladen.

Aber wenn Sie wirklich haben keinen Zugriff auf den Server haben, sollten Sie das Schreiben einer chunkingAPI untersuchen.

SimonB
quelle
0

Ich hatte auch dieses Problem und habe es durch Einstellen dieser Einstellung behoben /etc/nginx/nginx.conf

client_max_body_size 0;

0, wie in unbegrenzt.

Und wenn Sie einen Reverse-Proxy haben, der mit nginx ausgeführt wird, sollte dieser Server auch diese Einstellung haben (das hat mich hier abgeworfen)

Schreibmaschine
quelle
0

Wenn Sie die richtige php.ini-Datei bearbeitet, Apache oder Nginx neu gestartet haben und immer noch nicht funktionieren, müssen Sie auch php-fpm neu starten :

sudo service php-fpm restart 
Adrian Onu
quelle
0

Da globale Änderungen etwas riskant sind, habe ich versucht, den maximalen Upload-Wert für ein einzelnes Skript zu erhöhen big_file_upload.php. Aus irgendeinem Grund ini_sethat nicht geholfen. Nach einigen Recherchen habe ich mir das ausgedacht. Gib es ein .htaccess(es sei denn, der Name wurde über geändert AccessFileName)

<If "%{REQUEST_URI} == '/subfolder/big_file_upload.php'" >
php_value upload_max_filesize 200M
php_value post_max_size 200M
</If>
<Else>
php_value upload_max_filesize 1M
php_value post_max_size 1M
</Else>

Hat für mich gearbeitet.

Er ist
quelle