it-swarm.com.de

Können Datei-Uploads in PHP ablaufen?

Hallo, ich bin ziemlich neu in PHP. Ich habe ein Formular für sehr große CSV-Dateien erstellt, die auf meinen Server hochgeladen werden sollen. Jemand erwähnte mir, dass der Browser wegen zu hoher Upload-Datei eine Zeitüberschreitung haben kann. Stimmt das? und wenn ja, kann das verhindert werden?

Danke für Ihre Hilfe!

33
Ben McRae

Sie benötigen einen geeigneten Wert für die folgenden php.ini-Einstellungen:

  1. max_input_time (nicht max_execution_time!)
  2. upload_max_filesize
  3. post_max_size

und vielleicht

  1. memory_limit
56
Ionuț G. Stan

Es gibt einige Konfigurationsanweisungen, die dazu führen können, dass große Uploads fehlschlagen, wenn ihre Werte zu klein sind:

PHP

Apache

  • TimeOut Zeit, die der Server auf bestimmte Ereignisse wartet, bevor eine Anforderung fehlschlägt
  • LimitRequestBody Beschränkt die Gesamtgröße des HTTP-Anforderungshauptteils, der vom Client gesendet wird

Es gibt wahrscheinlich mehr als das.

30
Gumbo

Ein guter Weg, um den schlechten Umgang mit großen Dateiuploads in PHP zu umgehen, ist die Verwendung eines Uploaders wie JUpload , der die Datei vor dem Senden in Blöcke aufteilt. Dies hat auch den Vorteil, dass Ihre Benutzer beim Hochladen ein entsprechendes Feedback zum Fortschritt erhalten und mehrere Dateien gleichzeitig hochladen können.

5
Ronny Vindenes

Wenn Sie sehr große Dateien hochladen, müssen Sie 4 Konfigurationsvariablen ändern:

  • upload_max_filesize
  • post_max_size
  • memory_limit
  • time_limit

Das Zeitlimit kann zur Laufzeit mit set_time_limit () erhöht werden.

3
vartec

Ein Skript kann standardmäßig etwa 30 Sekunden lang ausgeführt werden. Sie können die Funktion set_time_limit () verwenden, um dies zu ändern. Wenn Ihr Benutzer große Dateien hochladen muss, müssen Sie außerdem die Werte für post_max_size und/oder upload_max_filesize in Ihrer php.ini-Datei ändern.

Wenn Sie Ihr Timeout-Limit nur global verlängern möchten, können Sie die maximale Ausführungszeit in php.ini ändern.

2
Beep beep

Ich konnte dieses Problem mit den folgenden Einstellungen lösen, Sie könnten andere Werte verwenden, aber Sie bekommen die Idee:

Für meinen Server füge ich diese Zeilen in eine ".user.ini" -Datei im Skriptverzeichnis ein. Möglicherweise sucht Ihr Server nach einer anderen Datei. Wenn Sie auf dem Server eine phpinfo ('user_ini.filename') ausführen, spuckt er aus die Datei, in der Sie Ihre Werte eingeben müssen

max_execution_time = 1800
max_input_time = -1
post_max_size = 100M
upload_max_filesize = 100M
memory_limit = 256M
1
Jim B

Ja, das ist wahr. Das Hochladen der Datei erfolgt über eine Anforderung POST, und Anforderungen unterliegen im Allgemeinen einem Timeout. Sie sollten in der Lage sein, Ihre Umgebung für ein längeres Anforderungszeitlimit neu zu konfigurieren.

1
Ates Goral

Meine Antwort bezieht sich nicht direkt auf Ihre ursprüngliche Frage. Wenn Sie jedoch einen Reverse-Proxy-Load-Balancer vor Ihrem PHP -Skript haben, kann der Load-Balancer ein Timeout oder Blockieren großer Uploads verursachen. Überprüfen Sie immer die Konfiguration Ihres Load Balancer, wenn Sie Dateiuploads unterstützen. Genau wie PHP sind die meisten Standardeinstellungen für Load Balancer für Uploads relativ klein.

1
Cory R. King

Es sind nicht nur Timeouts, die Probleme verursachen können. Es gibt einige Beschränkungen für die maximale Dateigröße, die hochgeladen werden kann. Diese Grenzwerte können in der Datei php.ini geändert werden:

post_max_size
upload_max_filesize memory_limit

Weitere Informationen finden Sie unter http://uk.php.net/ini.core .

1
macleojw

Wenn das Ändern eines der oben genannten Parameter keinen Unterschied macht, kann es sein, dass ein HTML-Formular irgendwo den Namen MAX_FILE_SIZE als verstecktes Feld enthält.

<input type="hidden" name="MAX_FILE_SIZE" value="10000000">

Im obigen Beispiel wird keine Datei mit mehr als 10 MB hochgeladen.

0
David Robertson