PHP / Javascript Chunked Upload: IE9 korrupte Datei, wenn die Dateigröße über upload_max_filesize oder post_max_size liegt

8

Ich verwende Plupupload , um Dateien hochzuladen. Wenn ich versuche, ein exe mit IE9 zu laden und die Dateigröße über upload_max_filesize oder post_max_size liegt, ist die hochgeladene Datei beschädigt.

Dies ist das PHP-Skript, das ich verwende:

%Vor%

Upload erfolgt über die HTML-Seite:

%Vor%

Wenn die exe beschädigt sind, wenn ich versuche, sie mit notepad++ zu öffnen, finde ich:

Meine Einstellung:

%Vor%

php.ini

%Vor%

Zusätzliche Informationen

  1. Alle Plupupload-Methoden (html5, flash, silverlight, html4) haben das Problem
  2. Antivirus deaktiviert
  3. UAC ist deaktiviert

VERSUCHEN SIE SICH SELBST

Ich habe ein Paket für jeden erstellt, der es ausprobieren möchte.

Paket herunterladen: Ссылка

My plupload-2.1.2.zip enthält außerdem eine beschädigte Upload-Datei im Ordner plupload-2.1.2/examples/upload/file_54c4c1d05c2ef und die Datei, die versucht wird, plupload-2.1.2/examples/TryMe.exe

hochzuladen

Bereiten Sie sich auf den Test vor (ich verwende XAMPP Version 1.8.3 ):

  1. Entpacke plupload-2.1.2.zip in deinem htdocs
  2. set php.ini upload_max_filesize=22M post_max_size=22M (weniger auf TryMe.exe Dateigröße 23MB), starte Apache neu
  3. Öffnen Sie IE9 (IE9 schlägt immer fehl), und gehen Sie zu: http://localhost/plupload-2.1.2/examples/custom.html
  4. Wählen Sie die Datei in %YourHtdocs%/plupload-2.1.2/examples/TryMe.exe und laden Sie
  5. hoch
  6. gehe in %YourHtdocs%/plupload-2.1.2/examples/upload/ und finde die hochgeladene Datei
  7. Die hochgeladene Datei ist beschädigt.
  8. set php.ini upload_max_filesize=24M post_max_size=24M (bis zu TryMe.exe Dateigröße 23MB), starte Apache neu
  9. Wählen Sie die Datei in %YourHtdocs%/plupload-2.1.2/examples/TryMe.exe und laden Sie
  10. hoch
  11. gehe in %YourHtdocs%/plupload-2.1.2/examples/upload/ und finde die hochgeladene Datei
  12. Die hochgeladene Datei ist in Ordnung.
Simone Nigro 17.01.2015, 11:12
quelle

2 Antworten

3

Was wir wissen ist, dass eine intakte Datei in Chunks aufgeteilt wird, denen jeweils ein HTTP multipart/form-data Header und ein Content-Disposition Header vorangestellt sind. Der erste wird immer korrekt entfernt, der zweite nicht Das gibt uns 3 Möglichkeiten:

  1. Mindestens einer der Header ist beschädigt, wenn die Datei gesendet wird.
  2. Mindestens einer der Header ist beschädigt, nachdem er vom Browser gesendet wurde, aber bevor er von PHP analysiert wird.
  3. Etwas läuft schief, während PHP die Anfrage analysiert.

Der Grund für eine der oben genannten Ursachen könnte eine destruktive Filterung durch eine Firewall, ein Antivirenprogramm oder einen anderen Dienst sein, der aus irgendeinem Grund den Netzwerkverkehr oder RAM- / Dateisystemaktivitäten übergehen muss. Für 1. könnte es auch ein Bug in der Browser / JavaScript / Flash / Silverlight / PlUpload-Engine sein. Für 2. könnte es natürlich sein, dass Apache etwas kaputt macht, aber das ist extrem unwahrscheinlich, da es die Daten 1: 1 an PHP weiterleitet. Jetzt können wir für 3. einen Fehler in PHP nicht ausschließen, aber das ist zu unwahrscheinlich, da PHP hier eine Konstante ist und die Ergebnisse mit verschiedenen Browsern variieren. Aber ich kann mir vorstellen, dass PHP die Datei erhält, zusammen mit der zweiten Kopfzeile speichert, dann die Datei gesperrt, weil ein Dienst sie filtert, die Filterung lange dauert, weil die Datei nicht vertrauenswürdig ist und PHP versucht, die zweite Kopfzeile zu entfernen, aber der Zugriff verweigert wird weil die Filterung immer noch läuft und am Ende bleibt eine Datei mit Header übrig. Die unterschiedlichen Ergebnisse mit verschiedenen Browsern können durch unterschiedliche Chunk-Größen oder einfach durch die Browser-Leistung erklärt werden.

Leider ist das alles nur Spekulation. Jetzt, da Microsoft sein Bestes getan hat, um es so schwer wie möglich zu machen, den IE herunterzustufen, kann ich es momentan nicht mit IE9 testen. Alles, was ich Ihnen geben kann, sind einige Debugging-Anweisungen:

Setzen Sie in Ihrer php.ini

%Vor%

Damit werden alle POST-Anforderungen auf diesem Server vollständig getrennt, aber Sie können die Datei-Upload-Anforderungen lesen und ausgeben.

Fügen Sie in Ihrer upload.php diese zwei Zeilen vor jedem anderen Code hinzu:

%Vor%

Starten Sie Apache und laden Sie TryMe.exe mit IE9 hoch. Neben Ihrer upload.php sollte nun eine out.txt-Datei stehen, die alle relevanten Daten zu den Datei-Upload-Anfragen enthält. Bitte laden Sie diese Datei irgendwo hoch und geben Sie uns einen Link dazu.

    
Siguza 25.01.2015 17:57
quelle
2

Standardmäßig ist die Dateigröße für den PHP max-Upload auf 2 MB eingestellt.

Versuchen Sie, Ihre PHP-Einstellungen zu aktualisieren (php.ini):

%Vor%

Weitere Informationen: Ссылка und Ссылка

    
JP Del Mundo 19.01.2015 20:50
quelle