2012-07-06 24 views
5

Ich habe kürzlich ein PHP-Download-Portal auf einem unserer Server installiert. Alles funktioniert gut, aber Benutzer können keine großen Dateien hochladen (~ 20 MB).Wie kann ich verhindern, dass große Apache/PHP-Dateiuploads fehlschlagen?

Ich habe die folgenden Einstellungen extrem große Werte oder unbegrenzt:

memory_limit 
upload_max_filesize 
post_max_size 
memory_limit 

Voll php.ini hier: http://pastebin.com/NrqJvMVM

Aber es immer noch nicht nach dem Neustart des Servers.

Fehle ich eine Einstellung? Muss ich irgendwelche Werte in der Apache-Konfiguration aktualisieren? Könnte eine Firmenfirewall das irgendwie stören?

EDIT: Ich habe phpinfo() überprüft und die Master-Konfiguration zeigt immer noch die alten Werte. Die Konfigurationsdatei C: \ Windows \ php.ini hat jedoch die neuen Werte. Benutze ich die falsche Konfigurationsdatei?

Antwort

14

Sie können testen Sie die params in einem Skript auch in .htaccess hinzuzufügen. Vielleicht hilft das:

  1. max_execution_time = ini_set ("max_execution_time", "-1");
  2. post_max_size = ini_set ("post_max_size", "200M");
  3. memory_limit = ini_set ("memory_limit", "200M");
  4. upload_max_filesize = ini_set ("upload_max_filesize", "200M");

In .htaccess:

php_value upload_max_filesize 200M

php_value memory_limit 256M

php_value max_execution_time 18000

Hier sind schöne Artikel zu diesem Thema: http://www.cyberciti.biz/faq/linux-unix-apache-increase-php-upload-limit/ | https://www.dokuwiki.org/faq:uploadsize

Ist Suhosin auf Ihrem Server installiert oder benutzen Sie fcgi ;-)?

+0

Ich benutze nicht Suhoshin oder fcgi. Ich habe versucht, die Werte zu .htaccess hinzuzufügen, aber der Datei-Upload funktioniert immer noch nicht. Ich bekomme jetzt keine Fehlermeldung, aber die Datei erscheint nie auf dem Server. – xsl

+0

Ich habe die Frage bearbeitet, vielleicht helfen dir die zusätzlichen Informationen weiter. – xsl

+0

Es funktioniert jetzt. Aus irgendeinem Grund konnte php die Konfigurationsdatei im Windows-Verzeichnis nicht lesen. – xsl

2

Sie haben post_max_size Variable zweimal geschrieben und aus dem Wert von zuerst, wenn 0 und Wert von Sekunde ist 9999M, entfernen Sie die erste und versuchen Sie es.

+0

Ich habe es versucht, aber es hat nicht geholfen. – xsl

+0

Warum haben Sie den Wert dieser Variablen so stark erhöht, setzen Sie sie einfach nach Ihren Bedürfnissen, nicht mehr als das. –

+0

Der einzige Wert, der wirklich riesig ist, ist die Größe des Datei-Uploads (9999 MB). Ich brauche eine unbegrenzte Upload-Größe, aber 9999 MB ist genug. – xsl

3

Vielleicht, this Artikel kann Ihnen helfen. Sie können params

+0

Danke, aber ich glaube Ich habe alle diese Einstellungen eingestellt. – xsl

+0

Als ich an riesigen Uploads arbeitete, fand ich dieses Applet http://jumploader.com/ Das kann PHP auch verwenden. Vielleicht kann das gut für Ihr Projekt sein. – Kerberos

1

Vielleicht ist MAX_FILE_SIZE nicht richtig eingestellt ...

<form enctype="multipart/form-data" action="index.php" method="post"> 
<input type="hidden" name="MAX_FILE_SIZE" value="50000" /> 
<input name="filedata" type="file" /> 
<input type="submit" value="Send file" /> 
</form> 
+0

Das Download-Portal hat auf anderen Servern funktioniert, daher glaube ich, dass das Problem nicht durch den Code selbst verursacht wird. – xsl

1

Sie sollten richtige php.ini =)

2

bin finde ich die falsche Konfigurationsdatei verwendet wird.

Nun, phpinfo() sagt Ihnen, welche Sie verwenden. Sehen Sie sich Configuration File (php.ini) Path und Loaded Configuration File direkt in der Nähe der Spitze des Ausgangs an.

6

Alle Konfigurationseinstellungen für Ihre Installation sind in der Datei php.ini enthalten. Manchmal können diese Einstellungen durch Anweisungen in Apache .htaccess Dateien oder sogar mit in den Skripten selbst überschrieben werden.

Folgende Einstellungen, die wir ändern müssen -

  • file_uploads
  • upload_max_filesize
  • max_input_time
  • memory_limit
  • max_execution_time
  • post_max_size

Die Konfigurationseinstellungen im Detail unten.

  • upload_max_filesize und post_max_size

    Die Dateien werden in der Regel auf den Webserver in einem Format bekannt als 'multipart/form-data' entsandter. Die post_max_size legt die Obergrenze für die Datenmenge fest, die ein Skript auf diese Weise akzeptieren kann. Idealerweise sollte dieser Wert größer sein als der Wert, den Sie für upload_max_filesize festgelegt haben.

    Es ist wichtig zu wissen, dass upload_max_filesize die Summe der Größen aller Dateien ist, die Sie hochladen. post_max_size ist die Datei upload_max_filesize plus die Summe der Längen aller anderen Felder im Formular sowie aller Mime-Header, die der Encoder enthalten könnte. Da diese Felder in der Regel klein sind, können Sie die maximale Größe des Uploads oft der maximalen Größe des Posts annähern.

    Entsprechend der PHP-Dokumentation können Sie ein MAX_UPLOAD_LIMIT in Ihrem HTML-Formular festlegen, um eine Begrenzung für den Browser vorzuschlagen.

  • memory_limit

    Wenn der PHP-Engine einige der eingehenden Daten zu halten im Speicher braucht es einen eingehenden POST verarbeitet. Diese Direktive wirkt sich nur dann aus, wenn Sie die Option --enable-memory-limit zur Konfigurationszeit verwendet haben. Ein zu hoher Wert kann sehr gefährlich sein, denn wenn mehrere Uploads gleichzeitig verarbeitet werden, wird der gesamte verfügbare Speicher aufgebraucht und andere nicht verwandte Skripte, die viel Speicher belegen, können sich ebenfalls auf den gesamten Server auswirken.

  • max_execution_time und max_input_time

    Diese Einstellungen definieren die maximale Lebensdauer des Skripts und die Zeit, die das Skript in der Annahme Eingang verbringen sollte. Wenn mehrere Megabyte an Daten übertragen werden, sollte max_input_time relativ hoch sein. Sie können die Einstellung in der INI-Datei für max_input_time überschreiben, indem Sie in Ihren Skripten die Funktion set_time_limit() aufrufen.

Additonal Kommentare

  • Apache Einstellungen

    Der Apache-Webserver verfügt über eine Limitrequestbody Konfigurationsdirektive, die die Größe aller POST-Daten, unabhängig von der Web-Skriptsprache in Gebrauch einschränkt. Einige RPM-Installationssätze begrenzen den Anforderungshauptteil auf 512 KB. Sie müssen dies zu einem größeren Wert ändern oder den Eintrag vollständig entfernen. mit einer Perl oder Java-Server-Seite Komponente

  • Andere Optionen

    Wenn Sie erwarten, dass eine große Anzahl von gleichzeitigen Dateitransfers auf Ihrer Website behandeln betrachten. PHP ist auch unsere bevorzugte Web-Programmiersprache, aber Perl und Java sind beim Datei-Upload nur ein kleines Stück voraus.

Siehe auch:

  1. Upload large File upto 100MB using php
  2. upload large files using php, apache
  3. PHP: Uploading large files fail
+0

Vielen Dank für Ihre aufschlussreichen Antworten, ich hoffe, dass es die Upvotes bekommt, die es verdient. Leider habe ich das Problem schon vor ein paar Tagen gelöst und eine Antwort akzeptiert, die mir dabei geholfen hat. – xsl

+0

Keine Probleme. Ich habe eine gründliche Antwort gegeben, weil die aktuellen Antworten nicht viele Informationen geben. –

1

Ich habe in der Vergangenheit in der Lage gewesen, und die beste Lösung, die ich gefunden wurde Dritter mit Bibliothek, um die Dateien in Stücke auf der Client-Seite zu teilen und alles wieder zusammenzufügen r auf dem Server. Ich fand dies: http://www.plupload.com/

Sehr praktisch und effektiv. Es funktioniert mit einer Vielzahl von verschiedenen Technologien, so dass es auf einer großen Mehrheit von Clients Maschinen arbeiten kann. (flash, silverlight, html5 Datei api usw. ...) Prost!

+0

Großartiges Beispiel für die Handhabung dieses vollständigen Code-Downloads: http://webdev-blog.com/ajax-upload-script-with-custom-folders/ – m1crdy

Verwandte Themen