2010-08-22 20 views
6

Ich habe ein seltsames Problem beim Hochladen großer Dateien in PHP. In der php.ini ist max_execution_time auf 30 gesetzt, post_max_size ist auf 32M eingestellt, upload_max_filesize ist auf 32M eingestellt. Als ich versuchte, eine Datei der Größe 40,2 MB hochzuladen, wurde kein Fehler angezeigt. Die $_FILES Variable hat den Wert array(0) { } und $_FILES['userfile'] zeigt NULL.Seltsames Problem beim Hochladen großer Dateien

Wenn die Dateigröße ist größer als der Wert in der php.ini gesetzt, dann sollte es zurückgeben die Fehlermeldung

UPLOAD_ERR_INI_SIZE, Wert: 1; Die hochgeladene Datei überschreitet die upload_max_filesize-Direktive in php.ini.

Aber es zeigt auch keinen Fehler (wie $_FILES ist ein leeres Array). Ich habe keine Ahnung, warum das passiert.

Wenn ich in der php.ini ändern und post_max_size auf 64M gesetzt, upload_max_filesize auf 64M gesetzt ist, dann funktioniert es gut. Also habe ich beschlossen, den folgenden Code zu verwenden, anstatt die php.ini-Datei zu ändern.

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

Ich versuchte sogar zu erhöhen max_execution_time. Trotzdem habe ich das gleiche Problem. ini_set() funktioniert hier nicht.

+0

Ich bin mir nicht sicher, warum die UPLOAD_ERR_INI_SIZE Fehler nicht angehoben wurde, aber ich kann sagen, dass upload_max_filesize oder der Wert von post_max_size mit ini_set Einstellung hat keine Auswirkung, da diese nicht eine Laufzeit festgelegt werden kann, gemäß dieser ini Liste : http://www.php.net/manual/en/ini.list.php –

Antwort

19

Um die 40 MB-Datei mit Upload-Fehler fehlschlagen zu lassen, müssen Sie die post_max_size erhöhen, wenn Sie den Wert dieser Variablen überschreiten, erhalten Sie eine leere $ _FILES-Array. Siehe the manual

Wenn die Größe der Postdaten größer als post_max_size, die $ _POST und $ _FILES leer sind.

Auch ini_set() funktioniert nicht dort, weil zwei der Variablen, die Sie ändern wollen PHP_INI_PERDIR sind und somit in der php.ini oder in .htaccess oder httpd.conf geändert werden müssen. Sie sollten die 40MB-Datei versuchen, mit zum Beispiel these settings in .htaccess

php_value upload_max_filesize 32M 
php_value post_max_size 64M 
php_value max_execution_time 300 
+0

Beste Antwort, außer Sie können nicht upload_max_filesize und post_max_size mit ini_set(), nur über .conf oder .ini-Dateien. –

+0

@Michael: Ja, realisierte, dass später, bereits behoben, danke –

+0

Eigentlich ist das dumm! wqhat, wenn ich nicht zulassen möchte, dass meine Seiten Gäste mehr als 2MB hochladen (wegen der Flut, die sie machen können), aber wenn sie Mitglieder sind, um bis zu 150MB hochzuladen ???? –

1

Es gibt ein mehr Einstellung, die Sie betrachten können müssen, Apache LimitRequestBody.

Wenn die Datei dies überschreitet, wird der Upload möglicherweise blockiert, bevor er überhaupt PHP erreicht.

Apache Documentation

+0

Dies ist auch ein guter Punkt. Ich habe es nie gewusst. Danke für das Teilen. – Debiprasad

1

ini_set() funktioniert hier nicht.

Die Werte, die Sie mit ini_set(), mit Ausnahme von max_execution_time, zu ändern versuchen, lässt sich nicht mit ini_set() geändert.
In der list of php.ini directives werden sie vom Typ PHP_INI_PERDIR gemeldet, was bedeutet (wie in Where a configuration setting may be set erklärt), dass sie in php.ini, .htaccess oder httpd.conf geändert werden können. Konfigurationseinstellungen, die mit ini_set() geändert werden können, sind die als PHP_INI_USER markierten.

+0

Ich möchte dies als akzeptierte Antwort markieren, aber Stack Overflow erlaubt nur eine Antwort als akzeptierte Antwort zu markieren, die ich bereits markiert habe. – Debiprasad

+0

@Debiprasad: Es ist nicht möglich, zwei akzeptierte Antworten zu haben; Sie sollten die zuvor ausgewählte auswählen, bevor Sie eine andere Antwort als akzeptiert auswählen. – kiamlaluno

0

FÜR SERVER:

In cPanel Suche nach php, werden Sie "Wählen Sie die PHP-Version" unter Software finden. Software -> Wählen Sie PHP Version -> Wechseln Sie zu PHP Optionen -> Wert ändern -> speichern.

FÜR LOCAL:

der ini PHP finden (Konfigurationseinstellungen) Datei in php-Ordner unter xampp. ändern post_max_size = 40M und upload_max_filesize = 40M

Verwandte Themen