Warning: Output-Buffer exceeds 1024kb. Operation halted.

Hallo,

die zurückzugebenden Daten eines IO können - wie ich gerade beim ‚Amazon Echo Remote‘ Modul feststellen musste - schon mal etwas größer sein. Auf eine Abfrage liefert Amazon mehr als 1 MB Daten zurück.:o

Wenn die Daten über SendDataToParent weitergegeben werden sollen, kommt es zu dem oben genannten Fehler.

Gibt es da schon Beispiele, wie man damit umgehen sollte?

Gruß

Burkhard

Output Buffer meint aber meisten die Ausgabe (Fehler, Echo, var_dump etc…) von PHP an den Aufrufer.
Das Limit ist beabsichtigt.
Sicher das es keine Ausgabe ist, sondern der Datenaustausch?
Michael

Definitiv. Die Meldung lautet vollständig:

Warning:  Output-Buffer exceeds 1024kb. Operation halted. in C:\IP-Symcon\modules\IPSymconEchoRemote\Echo Device\module.php on line 1594

und in Zeile 1594 steht:

$ResultJSON = $this->SendDataToParent(json_encode($Data));

Du sendest an den Parent.
Ist das auch ein PHP-Modul?
Wenn diese Instanz wiederum einen Fehler auswirft (in ForwardData und folgenden Methoden) dann ist dies deine Ursache.
Kannst du einfach testen, indem du eventuelle Fehler unterdrückst


$ResultJSON = @$this->SendDataToParent(json_encode($Data)); 

Wenn dann diese Meldung nicht mehr erscheint, dann ist deine Fehlerbehandlung im Parent magelhaft.

BTW: Was haben denn an der Stelle die empfangen Daten von Amazon damit zu tun? Die wären ja im ReceiveData zu finden und nicht im ForwardData welche du versendet.
Michael

Es gibt ein hartes Limit von 1MB beim Output/Verarbeiten von PHP Daten (Egal ob Skript oder Datenfluss). Kannst du das nicht irgendwie umgehen im Amazon Modul?

paresy

Ja, der Parent ist auch ein PHP -Modul.
Wenn ich die Fehlerunterdrückung einbaue, dann liefert SendDataToParent false zurück.

Die letzte Anweisung vor dem Return des ForwardData im Parent schreibt noch die zurückzugebenden Daten in den Debug (und das sind mehr als 1MB). Da ist noch alles OK. Es geht also um den Transfer zurück zum Child. Bei dem müssen mehr als 1 MB ‚transportiert‘ werden.

Ich habe nur gesehen das es da einige trigger_error in ForwardData in eurem IO gibt.

Da bin ich wohl bisher noch nicht an das Limit gekommen :smiley:
Michael
Edit: Hat sich erledigt.

Konntest du auch nicht, da es die entsprechende public Methode noch nicht gibt :slight_smile:

Ich möchte das Thema aber gerne noch einmal hochholen, da ich gerne eine Methode zum holen der ‚prime-sections‘ (Radiosender, Genres etc) von Amazon Prime anbieten würde.

Hat jemand eine Idee, wie ich die große Datenmenge ‚elegant‘ durch das Nadelöhr oder an ihm vorbei bekomme? Wäre da wirklich dankbar.

Gruß

Burkhard

Ich könnte das harte Limit über einen Spezialschalter änderbar machen - was aber trotzdem erfordern würde, dass der User dies anpasst. Und natürlich ggf. bei einem echten Problem den RAM sehr unnötig belastet. Man könnte das Paket aufteilen - aber dann wäre gleich die Frage wo du die Teile speicherst. Bei String Variablen hast du ebenfalls das 1MB Limit und der InstanceBuffer hat 8kb als Limit. Auf der Festplatte speichern ist wegen der bekannten SD-Karten Problematik auch nicht so gut.

paresy

Vielen Dank für das Angebot des Spezialschalters!

Ich habe mich jetzt entschieden, die Funktion mit Filtermöglichkeiten auszustatten. Solange man die Filter nutzt bleibt man nun unter dem Limit :smiley:

Mal schauen, was in der Praxis daraus wird…

Es ist natürlich schöner, wenn man ohne Spezialschalter auskommt.

Es fehlt aber noch eine Fehlerbehandlung. Daher meine abschließende Frage: wie prüfe ich am besten auf das Limit? Meine Versuche mit strlen schlagen viel zu spät an…
Oder sollte ich besser ein Exception Handling einbauen? Da bräuchte ich aber auch einen Tipp.

Gruß

Burkhard

Ein Beitrag wurde in ein existierendes Thema verschoben: Wie funktionier AC_GetLoggedValues?