PHP, AJAX: große Daten werden abgeschnitten

9

Das Problem

Ich verwende jQuery, um eine (relativ) große Datenmenge an ein Web-System zu senden, das ich von Ubuntu nach CentOS migriere (ein schmerzhafter Prozess). Das Problem besteht darin, dass die empfangenen Daten abgeschnitten werden. Das Senden der gleichen Daten vom Server an den Client führt zu keiner Kürzung.

Die Menge der Daten, die gesendet werden (das ist, was ich beim Debuggen von Javascript sehe) ist 116.902 Bytes (die korrekte Datenmenge), während die Menge der empfangenen Daten ungefähr 115,668 Bytes: Diese Zahl scheint zu variieren, was mich glauben lässt, dass das Problem zeitbezogen sein könnte. Die Transaktion wird in ungefähr 3,1 Sekunden abgeschlossen (Empfang, Antwort), nicht sehr viel Zeit. Gibt es irgendwelche Einstellungen, die ich untersuchen sollte?

Abgesehen von dieser Idee ist meine PHP-Installation so konfiguriert, dass sie 8 Millionen Post-Daten akzeptiert und bis zu 128 Millionen physikalischen Speicher verwendet, was genug scheint.

Der jQuery-Code ist unten. Ich bin mir ziemlich sicher, dass das nicht das Problem ist, aber ich habe es wie gewünscht aufgenommen.

Empfangen:

%Vor%

Senden:

%Vor%

Umgehung (würde dies nicht als Lösung bezeichnen)

Edit: Ich habe das "repariert", aber nicht unbedingt herausgefunden, was das Problem ist und wie es gelöst werden kann. Es ist ein interessantes Problem, daher beschreibe ich meine Problemumgehung und lasse die Frage offen.

Was ich mache, ist eher, als jquery die Serialisierung meiner großen Daten handhaben zu lassen, ich mache es zuerst selbst, im Wesentlichen zweimal serialisierend. Der Code dafür lautet wie folgt:

%Vor%

Die wichtige Zeile ist natürlich:

%Vor%

Jetzt, wenn es den Server trifft, muss ich diese Daten dekodieren, weil es zweimal serialisiert wurde. Mit dieser "Lösung" entstehen zusätzliche Kosten: mehr Daten senden, mehr Arbeit erledigen. Die Frage bleibt: Was ist das Problem und was ist die wirkliche Lösung?

    
Liam M 25.07.2012, 17:41
quelle

4 Antworten

2

Versuchen Sie, jQuerys Parameter ajax timeout auf eine hohe Zahl zu setzen (beachten Sie, dass es sich um Millisekunden handelt, also werden Sie wahrscheinlich 10000 benötigen, was 10 Sekunden entspricht). Einige andere Möglichkeiten zu versuchen:  1. Überprüfen Sie, ob Ihre PHP max Ausführungszeit eine anständige Menge ist. Ich bezweifle, dass dies verwandt wäre, aber es ist möglich .  2. Führen Sie in der jQuery-Fehlerfunktion console.log(xhr) für das XHR -Ergebnis aus (Sie müssten dies in Chrome tun oder eine andere Methode zum Anzeigen des Ergebnisses finden). XHR ist ein XHR-Objekt, das Debug-Informationen darüber enthält, was mit der Verbindung passiert ist, z. Statuscodes, Timeout-Informationen, usw.

EDIT: Haben Sie auch die maximale Größe des Feldes in Ihrer Datenbank überprüft? Es ist durchaus möglich, dass die Datenbank die Informationen automatisch abschneidet.

    
Zane Hooper 25.07.2012 23:23
quelle
1

Mein Bauchgefühl ist, dass es ein php-Timeout ist, ich habe noch nie von einem JavaScript-Timeout gehört - und ich habe jquery für 3 oder 4 Stunden laufen, aber dann weiterhin kleine Updates (wie eine _SESSION Fortschrittsbalken in PHP ... aber ich schweife ab.. sowieso muss man firefox dafür verwenden, IE "glaubt" dir nicht, wenn du weißt, was du machst und Timeout nach ca. 40 Minuten) ~ Chrom wurde von mir nicht benutzt die Zeit.

Eigentlich, wenn Sie darüber nachdenken, sagen Sie, dass Sie zu CentOS-Sounds zu mir migrieren, als wäre HAS Server-bezogen. Sie suchen einfach am falschen Ort.

BTW Herzlichen Glückwunsch zu CentOS, es ist unglaublich! Ich würde es einfach machen und eine ganze LAMP CentOS VM nur für diese App haben (versuche nicht mit den Vhosts zu spielen, es ist v v chaotisch) und setze einfach die ganze Apache / PHP Installation auf wahnsinnig hoch.

Die korrekten php.ini Einstellungen sind

%Vor%     
conners 27.07.2012 10:36
quelle
1

Überprüfen Sie die folgenden php.ini-Variablen:

post_max_size

max_input_vars - Dies könnte tatsächlich der Täter sein, weil es Daten

abschneidet     
Gerry Eng 12.09.2012 02:00
quelle
0

PHP POST / GET / COOKIE sind standardmäßig auf 1000 Einträge beschränkt. Alles darüber wird ignoriert. Es zählt die Anzahl der Einträge, nicht die tatsächliche Datenmenge. Ich suggest Sie, um Ihre php.ini zu bearbeiten und die Einstellung max_input_vars auf einen größeren Wert zu setzen.

Grüße.

    
Jecko 20.06.2013 09:01
quelle

Tags und Links