Frage Warum würde php: // truncate eingeben?


Ich habe die Linie $input = fopen( 'php://input', 'r' ); in meinem Code für Uploads.

Wenn die Datei hochgeladen ist, überprüfe ich $_SERVER['CONTENT_LENGTH'] zu sehen, alles wurde wie erwartet gesendet. Kürzlich der CONTENT_LENGTH und die Größe meiner Upload-Datei begann nicht zufällig zu stimmen (etwa einmal alle 20 Minuten mit Leuten, die sehr häufig hochladen).

Ich habe die Unterschiede protokolliert und gespeichert und festgestellt, dass einige Dateien nicht geöffnet werden konnten, während einige heruntergeladen und abgeschnitten wurden. Eine, die ich in Photoshop geöffnet habe, hat sogar davor gewarnt, dass das Dokument beschädigt ist.

Gibt es eine Serverkonfiguration, nach der ich suchen sollte, die möglicherweise geändert wurde?

Ich habe versucht, zu replizieren, indem ich Browser-Tabs und solche Dinge geschlossen habe, aber den Fehler nicht replizieren würde.

Wir laden über einen AJAX POST hoch. Das POST body ist die Upload-Quelle.


9
2017-08-26 14:04


Ursprung


Antworten:


Es klingt für mich wie ein Last / Netzwerk-Problem. Entweder gibt es ein Latenzproblem / Timeout-Problem, bei dem die Benutzer versuchen hochzuladen, und der Server reagiert nicht.

Normalerweise ist es nicht das AJAX, sondern der Server (vielleicht nicht einmal PHP). Ich denke, dass an einigen Stellen der Pakete auf den Server fallen. Dies kann Einschränkungen im Datencenter (z. B. Bandbreitenbegrenzung) oder Beschränkungen auf dem Server selbst sein.

Wir optimieren unseren Server mit folgender Konfiguration. Dies sollte auf jeder Linux-Distribution funktionieren:

Bearbeiten /etc/sysctl.conf Datei. Fügen Sie die folgenden Zeilen am Ende hinzu:

net.ipv4.tcp_wmem= 10240 87380 12582912
net.ipv4.tcp_rmem= 10240 87380 12582912
net.core.rmem_max=12582912
net.core.wmem_max=12582912
net.ipv4.tcp_max_syn_backlog=100000

Sie können das folgende Handbuch von IBM verwenden, um besser zu verstehen, wie Sie Ihren Linux tunen: http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf

Ebenfalls,

Ich würde die Browserversion des Clients protokollieren. Es kann sein, dass das an Ihren Server gesendete Format davon abhängt, dass sich AJAX von einem Browser zum anderen unterscheidet. Da Sie den AJAX-Code nicht angegeben haben, ist es schwer anzunehmen, was der AJAX tut, um die Dateien hochzuladen.


1
2017-09-02 10:18



Da ist ein post_max_size und ein upload_max_filesize Richtlinie in php.ini, vergleichen Sie die Werte mit der Größe Ihrer abgeschnittenen Dateien, um zu sehen, ob das der Grund ist.


-3
2017-08-29 07:41