4 GB HTTP-Datei-Uploads mit jQuery-File-Upload, Apache und PHP

Dieses Problem scheint in direktem Zusammenhang mit dem berüchtigten 2 GB-Limit zu stehen, und ich bin mir nicht sicher, ob es sich um ein 32-Bit-PHP-Problem handelt. Ich habe gesehen, dass die Kommentare zu HTTP nicht für so große Dateien entwickelt wurden. Ich würde diese Richtung jedoch lieber ausschöpfen, bevor ich mich zu einer grundlegenden Änderung dessen entscheide, was nachweislich funktioniert. Wie der Titel andeutet, muss ich> 2 GB Dateien hochladen, die größten sind bisher 3,8 GB. Ich habe ein Formular mit jQuery-file-upload erstellt, das keine Probleme beim Senden von Dateien (alle weniger als 2 GB) hatte, bis diese großen gestartet wurden. Das Hochladen von 3,8 GB über File-Upload dauert etwa 5 Minuten, und der Fortschrittsbalken ist zu 100% vollständig. Der gemeldete Fehler nach dem Hochladen ist jedoch vom Typ 1, was darauf hindeutet, dass die Dateigrößenbeschränkung überschritten wurde.

Wenn ich die Datenträgernutzung auf dem Server während des Uploads überwache, werden die folgenden Beispieleigenschaften angezeigt: Vor dem Upload wird der Datenträger zu 30% verwendet. Da der Upload fortgesetzt wird, erhöht sich die Datenträgernutzung um 31%, 32% .... 45%, 46%. usw. Bei etwa 2 GB sinkt die Festplattenauslastung jedoch auf 30%, während der Client / Browser-Datei-Upload fortgesetzt wird. Wenn die Datenträgernutzung des Servers nicht mehr zunimmt, beträgt der Client möglicherweise nur 60% des Uploads. Der Client ist jedoch weiterhin zu 100% aktiv, wird jedoch vom Server nicht akzeptiert, da der Festplattenstatus nie um 30% abnimmt.

Ich verwende 64-Bit-Ubuntu (neueste Version) mit Apache / 2.2.22 (Ubuntu) und PHP Version 5.3.10-1ubuntu3.2. Nach vielen Tagen auf der Suche nach einer Lösung kann ich die 3,8-GB-Datei nach dem Ändern immer noch nicht zum Hochladen bringen so viele Einstellungen. Ich werde die Art der Änderungen unten auflisten, aber zu diesem Zeitpunkt denke ich, dass es ein 32-Bit-PHP-Problem sein könnte. Wenn also jemand einen Link vorschlagen kann, der es wert ist, verfolgt zu werden, oder eine Lösung, die es wert ist, ausprobiert zu werden, würde ich es begrüßen.

In Apache2 habe ich Folgendes eingestellt:

- apache2.conf I've set Timeout to 900
- httpd.conf I've set LimitRequestBody to 0
- .htaccess in the file upload directory I've set:
    - LimitRequestBody to 4939212390
    - php_value upload_max_filesize 4831838208
    - php_value post_max_size 4939212390

In der php.ini habe ich folgendes eingestellt:

- UPLOAD_MAX_FILESIZE 4831838208
- POST_MAX_SIZE 4939212390
- max_execution_time 120
- max_input_time 60
- memory_limit 128M

Wenn ich das Folgende auf dem Server laufen lasse, scheint es, dass PHP kein 32-Bit-Problem hat, aber ich bin mir in diesem Stadium nicht sicher.

php -r "echo PHP_INT_MAX;"
9223372036854775807

Wie ich bereits erwähnte, wären alle Ideen sehr dankbar.

AKTUALISIEREN:

Haben dieses Problem behoben. Vielen Dank an @BogdanBurim für den Hinweis auf den Back-to-Basics-Ansatz:

Ich habe es geschafft, eine 3,8-GB-Datei über HTTP mit den folgenden Einstellungen hochzuladen:

In Apache2 habe ich Folgendes eingestellt:

- apache2.conf I've set Timeout to 900
- httpd.conf I've set LimitRequestBody to 0
- .htaccess in the file upload directory I've set:
    - LimitRequestBody to 0
    - php_value upload_max_filesize 0
    - php_value post_max_size 4939212390
- .htaccess in the php temp directory (in my case its /tmp/) I've set:
    - LimitRequestBody to 0
    - php_value upload_max_filesize 0
    - php_value post_max_size 4939212390

In der php.ini habe ich folgendes eingestellt:

- UPLOAD_MAX_FILESIZE 0
- POST_MAX_SIZE 4939212390
- max_execution_time 120
- max_input_time 60
- memory_limit 128M

Der einzige andere wichtige Teil dieser Lösung bestand darin, MAX_FILE_SIZE, HTML aus dem Upload-Formular zu entfernen:

<input type="hidden" name="MAX_FILE_SIZE" value="4939212390" />

Wenn dieses Set ständig gesetzt ist, ist ein PHP-Typ-2-Fehler aufgetreten, sodass PHP die eingestellte Ganzzahl von mehr als 32 Bit nicht verarbeiten kann. Das Entfernen verursachte PHP-Typ-1-Fehler, bis ich UPLOAD_MAX_FILESIZE überall auf 0 änderte und es jetzt funktioniert !!!!

http://php.net/manual/en/features.file-upload.errors.php

Antworten auf die Frage(3)

Ihre Antwort auf die Frage