Ich habe die Zeile $input = fopen( 'php://input', 'r' );
in meinem Code für Uploads.
Wenn die Datei hochgeladen wurde, überprüfe ich mit $_SERVER['CONTENT_LENGTH']
, ob alles wie erwartet gesendet wurde. Kürzlich begannen die CONTENT_LENGTH
und die Größe meiner Upload-Datei nicht zufällig übereinzustimmen (ungefähr 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 immer noch nicht repliziere.
Wir laden über einen AJAX POST hoch. Der POST
body ist die Upload-Quelle.
Es klingt für mich wie ein Last / Netzwerk-Problem. Entweder gibt es ein Latenzproblem / Timeout-Problem, bei dem die Benutzer versuchen hochzuladen und Ihr Server reagiert nicht.
Normalerweise ist es nicht die AJAX, die Schuld zu geben, eher 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. Bandbreite) oder Einschränkungen auf dem Server selbst bedeuten.
Wir optimieren unseren Server mit folgender Konfiguration. Dies sollte auf jeder Linux Distribution funktionieren:
Bearbeiten Sie /etc/sysctl.conf
-Datei. Fügen Sie am Ende folgende Zeilen hinzu:
Sie können das folgende Handbuch von IBM verwenden, um besser zu verstehen, wie Sie Ihren Linux tunen: Ссылка
Auch
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 zu sagen, was der AJAX tut, um die Dateien hochzuladen.
Es gibt eine post_max_size
und eine upload_max_filesize
Direktive in php.ini, vergleiche die Werte mit der Größe deiner abgeschnittenen Dateien, um zu sehen, ob das der Grund ist.