Größere Datenmengen mit LoadVars/PHP

Tobias Menzel

Erfahrenes Mitglied
Hallo,

vielleicht kennt jemand eine Erklärung für folgendes Problem:

Ich verwende das LoadVars-Objekt, um Daten an ein PHP-Script zu schicken. Dabei hat sich herausgestellt, dass in PHP im superglobalen Array $_POST keine Daten ankommen, wenn der String im LoadVars-Objekt eine bestimmte Größe überschreitet (wahrscheinlich irgendwo zwischen 10 und 14 KB). Meine ersten Vermutungen gingen in Richtung post_max_size (PHP), aber das halte ich eigentlich für unwahrscheinlich (angeblich ist der voreingestellte Wert meistens 8MB - ich lasse bei t-online hosten, und werde notfalls deren Hotline bemühen;)).

Die Variable (hier: loadvarsobject.filestr) habe ich in Flash ausgeben lassen, und sie enthält in jedem Fall alle meine Daten.

Das seltsame ist, dass die Übertragung lokal auf meinem Rechner (mit Apache 1.3.23) unabhängig von der Größe funktioniert.

Weder bei Google noch auf der HP von Macromedia habe ich Hinweise auf Größenbegrenzungen beim Senden mit LoadVars gefunden - vielleicht kann mir dennoch jemand einen Tipp geben?

danke im Voraus.
 
Hi,

versuch es mal mit folgendem Script:

<?php
$querystring = $_SERVER['QUERY_STRING'];
$decquerystring = urldecode($querystring);
$a = split ('[?&]', $decquerystring);
array_pop ($a);
$i = 0;
while ($i < count ($a)) {
$b = split ('[=]', $a [$i]);
${$b[0]} = $b[1];
$i++;
}
?>

+ Ausgabe des Arrays, damit kannst du auf jeden Fall verfolgen was ankommt -


Links:
http://www.flashforum.de/forum/showthread.php?t=133632&highlight=LoadVars

http://www.macromedia.com/support/flash/ts/documents/too_much_data.htm

http://www.macromedia.com/support/flash/ts/documents/flashplayer_r40.htm

und allgemein:
http://www.macromedia.com/cfusion/s...11&AREA=support.flash&LOC=en_us&TERM=LoadVars

wahrscheinlich lässt sich das ganze nur mit dem splitten der Datenübertragung oder aber dem xml Objekt lösen....

Grüsse
B
 
Hi,

danke für die schnelle Antwort.

... ich gebe zu, mich in PHP nicht wirklich auszukennen - jedenfalls erhalte ich für
PHP:
urldecode($_SERVER['QUERY_STRING']);
etwa folgendes: 4338.55626964942

Das Splitten hat da wenig Zweck, da die angegebenen Trennzeichen nicht enthalten sind...

Ich bin inzwischen auch davon abgekommen, den Fehler auf der Flash-Seite zu vermuten, da
1. das Laden auch größerer Datenmengen mit LoadVars kein Problem darstellt (die 60KB-Grenze erreiche ich mit meinem maximal 20 auch nicht)

2. das Senden mit LoadVars.sendandload problemlos funktioniert, wenn ich es unter Apache auf dem Localhost teste - Flash dürfte es eigentlich völlig egal sein, wo sich der Server befindet, oder?

Bleibt eigentlich noch die Obergrenze für Post-Data im T-Online-PHP;) oder meine Anbindung zum Netz als Fehlerquelle...

Ich werde trotzdem wohl alternativ mal das XML-Objekt ausprobieren - vielleicht klappts ja dann mit dem Nachbarn. :)

Gruß

P.S.: die von Dir gelinkten Macromedia-Seiten habe ich auch schon besucht, jedoch keinen direkten Zusammenhang mit meinem Problem ausmachen können. Bleibt mir immer noch die Alternative, die Daten aufzusplitten, was allerdings Änderungen an meinen Scripten erfordert, die ich gerne umgehen würde, da so wie ich es sehe, das PHP-Script ja mehrmals aufgerufen werden muss und die zu speichernde Datei "zusammenbasteln" muss...

EDIT:
ich habe inzwischen herausgefunden, dass von der t-online Seite keine Einschränkungen irgendwelcher Art bestehen - nichtsdestotrotz muss der Fehler irgendwo in dem Unterschied zwischen dem Local- und dem Remotehost liegen... fragt sich nur, welches Forum zur Weiterverfolgung meiner Frage geeignet ist - PHP oder Webserver? ;)
 
Zuletzt bearbeitet:
Na ja,

obiges Script nutzt dir nur etwas, wenn du im LoadVars Objekt POST als Parameter angibst und mehrere Variablen übermittelst, die Trennzeichen macht Flash dann schon selbst -
die Macromedia TechNotes sind zum Thema Obergrenze und LoadVars die einzigen, die es gibt, Informationen teilweise ein bisschen versteckt im Text, der letzte Link führt einfach zum Suchergebnis LoadVars im Bereich TechNotes....

Wenn du aber POST als Parameter angibst, dann sendet Flash ALLE Variablen des FIlms bzw der Stufe an das PHP Scrpt, was zu unübersehbaren Üroblemen führen kann, wenn das 1. eine Menge sind, oder 2. gleichnamige Variablen auftauchen - also einfach mal versuchen, ohne "POST" zu senden.....


Grüsse
B
 
Nochmal Hi,
Wenn du aber POST als Parameter angibst, dann sendet Flash ALLE Variablen des Films bzw. der Stufe an das PHP Script
... ich dachte bislang, dass auch bei POST nur die Variablen meines LoadVars-Objektes gesendet werden?
Gleiche Bezeichner habe ich keine; die Datenmenge in meinem SWF bleibt auch bei größeren "Sendepaketen" konstant - zumal es bei 6 KB problemlos funktioniert, bei 14KB aber nicht mehr...

Danke jedenfalls für den Hinweis, ich werde es gleich mal mit GET ausprobieren - die Beschränkung der Browser-Adresszeile dürfte ja bei sendAndLoad keine Rolle spielen (da kein Fenster geöffnet wird).

Gruß

EDIT:
Pustekuchen - mit GET will Flash nur SEHR kleine Datenmengen senden.
Ich lasse mein PHP-Script eine "Erfolgsvariable" zurückgeben - die wird auch in allen Fällen brav von Flash angezeigt, genau wie die Daten (14KB) brav an den Server geschickt werden (gut zu sehen, in meinem DSL-Monitor)... Bloß, dass $_POST immer leer ist und deshalb "storage_failed" zurückgegeben wird... :(
... Ich möchte kein Doppelposting begehen - vielleicht mag ja jemand den Thread ins PHP-Forum verschieben?
 
Zuletzt bearbeitet:
Ne, ne du -

lass einfach den Parameter "POST" bzw "GET" ganz weg, und übertrage die Daten als Query String nach dem *.php?...., jaaaa das geht - du wirst erstaunt sein, obwohl ich nicht weiss, ob das dein spezielles Problem jetzt löst..... Ein ähnliches Problem meinserseits konnte ich unter anderem damit lösen....

Im Allgemeinen: mit "POST" sendet dein FIlm alle Variablen, was ja eine ganze Menge sein können, ausserdem stellt diese 'Undokumentiertheit' meiner Meinung nach ein Sicherheitsloch dar, aber na ja ...

Grüsse
B
 
ausserdem stellt diese 'Undokumentiertheit' meiner Meinung nach ein Sicherheitsloch dar
das würde ich aber auch meinen... ;)


:) ok, das werde ich dann auch ausprobieren, vielleicht hilft's ja.

Nur, was zum Teufel mit meinen Daten passiert, die sich auch bei Post in richtung Server aufmachen, würde ich schon gerne wissen. well, curiosity killed the cat ;)

Gruß
 
Hi,

ja, ja, das hat mich auch einmal eine Nacht gekostet - sie alle finden sich im HTTP_POST_VARS 'Super_Global' Array und im Querystring wieder - was, wenn man per querystring Daten schickt manchmal Verwirrung stiftet - obiges kurzes Script mit einer kleinen Ausgaberoutine versehen zeigt dir das ... ich war von den Socken ....

Grüsse
B
 
Hi,

..hätte ich nicht gedacht, dass die Daten auf beim Versenden mit Query-String in $_POST zur Verfügung stehen (in $_GET sind sie keinesfalls aufgetaucht ;)) - man lernt nie aus.

Die Änderung hatte leider keine Auswirkungen auf meine Problematik - es gilt nach wie vor: Mit Apache geht's, im Internet nicht (nur bei sehr kleinen Dateien).

Ist wahrscheinlich wirklich kein Flash-Problem, sondern was merkwürdiges...

Nun, ich will Dir nicht weiter auf Die Nerven fallen, zumal Du mir schon gehörig auf die Sprünge geholfen hast - ich muss mich momentan einfach damit abfinden, dass mein Leveleditor online nicht zur Verfügung stehen wird (bis ich mir die Mühe mache, die Daten vielleicht aufzuteilen und in Paketen zu schicken). Es genügt ja, wenn ich auf meinem Rechner auch größere Levels abspeichern kann.

(Zur Info: das ganze wird wenns fertig ist ein Tutorial zum Erstellen eines Jump 'n Run Spiels mit Flash - eben inklusive Leveleditor... :))

Gruß
 
Zurück