Output-Buffer exceeds 1024kb ......

Hatte heute das erste mal einen seltsamen Fehler in meinem benutzerdefinierten Logfile.

Die Meldung ansich ist mir klar da durch die 2.6 bestimmte Streams größer 1024kb gestoppt werden, aber ich finde keinen Hinweis darauf welches Skript oder welche Instanz die Meldung verursacht.

Im IPS-eigenen Logfile ist keine Meldung zu finden.

Schwierig. Welche Skripte liefen denn zur besagten Zeit?

paresy

Ich würde hier eventuell mal auf eine endlos Rekursion tippen, die hier so einen tiefen Stack produziert hat.

Wenn Du das öfters hast, würde ich mal eine zusätzliche Ausgabe in ein LogFile einbauen vor dem „print“.

Gute Frage, bedarf einer tieferen Analyse da meine Logfile-Ausgabe eingeschränkt wurde.

                    Ich würde hier eventuell mal auf eine endlos Rekursion tippen, die hier so einen tiefen Stack produziert hat.

Wenn Du das öfters hast, würde ich mal eine zusätzliche Ausgabe in ein LogFile einbauen vor dem „print“.

Da gibt es derzeit kein direktes LogHandling, nur den Fileeintrag in der php.ini

log_errors = On
error_log  = "K:\IP-Symcon2\_error.log"

Aber gute Idee. Ich sollte den IPSLogger_PhpErrorHandler wieder aktivieren :eek:

Werde es weiter beobachten und mich wieder melden sollte es nochmals auftreten.

Danke für euer Feedback.

Hallo

Ich bekomme auch diese Fehlermeldung beim ausführen eines Skripts.
Ich würde gerne Verbrauchswerte aus dem Archiv auswerten. Dazu habe ich ein Beispielskript, welches in diesem Fall für jeden Tag im Mai 2017 einen Wert ausgeben müsste (31 Werte).
Hätte jemand einen Tipp, was den Fehler verursacht? Ich denke dass es an dem Skript und nicht an dem IPSServer liegt.

Danke im Voraus

Grüße

Albert

<?

$TageJanuar = 31;
$TageFebruar = 28;
$TageMärz = 31;
$TageApril = 30;
$TageMai = 31;
$TageJuni = 30;
$TageJuli = 31;
$TageAugust = 31;
$TageSeptember = 30;
$TageOktober = 31;
$TageNovember = 30;
$TageDezember = 31;


//Mai 2017
$Tag = 1;
$Verbrauch = 0;

while ($Tag <= $TageMai) {
$VerbrauchValue = AC_GetAggregatedValues(35177 /*[Archive]*/, 17246 /*[ModBus TCP/IP\Kessel\Verbrauch_seit_Aschebox_leeren_ModBusDevice\Verbrauch seit Aschebox leeren]*/, 1 /* Täglich */, mktime(0, 0, 1, 5, $Tag, 2017), mktime(23, 59, 59, 5, $Tag, 2017), 0);

foreach($Verbrauchswerte as $VerbrauchValue) {
	echo $VerbrauchValue['Max'] . PHP_EOL;
	
$Tag++;

}
}

?>
Output-Buffer exceeds 1024kb. Operation halted.

Deine foreach Schleife ist der Verursacher.
$Verbrauchswerte ist nicht definiert => Fehlermeldung.
Dadurch dass $Tag++ in dieser Schleife ist, wird der Tag nicht erhöhte und while ist ewig true.
Also jedesmal
$Verbrauchswerte ist nicht definiert => Fehlermeldung
Bis der 1MB Buffer voll ist.
Michael

Vielen Dank für deine Antwort, Micheal.

Durch definieren der Variable $Verbrauchswerte = Array() vor der Schleife scheint diese zu laufen, jedoch sehr viel Ressourcen zu benötigen, da ich diese Fehlermeldung bekomme:

Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 24 bytes) in /var/lib/symcon/scripts/12835.ips.php on line 26

Weil das Script noch immer falsch ist. Du hast doch $VerbrauchValue schon mit AC_GetAggregatedValues gefüllt.
was soll also die foreach wo du diese Variable wieder überschreibst?!
Michael

Ok. Eigentlich sollte der Wert nach dem Auslesen in ein Array geschrieben werden.
Weisst du abschließend vielleicht noch, wie der Wert aus dem Archiv als String Variable ausgegeben werden kann?
(Zeile 26)

<?

$TageJanuar = 31;
$TageFebruar = 28;
$TageMärz = 31;
$TageApril = 30;
$TageMai = 31;
$TageJuni = 30;
$TageJuli = 31;
$TageAugust = 31;
$TageSeptember = 30;
$TageOktober = 31;
$TageNovember = 30;
$TageDezember = 31;




//Mai 2017
$Tag = 1;
$Verbrauch = 0;

while ($Tag <= $TageMai) {
$VerbrauchValue = AC_GetAggregatedValues(35177 /*[Archive]*/, 17246 /*[ModBus TCP/IP\Kessel\Verbrauch_seit_Aschebox_leeren_ModBusDevice\Verbrauch seit Aschebox leeren]*/, 1 /* Täglich */, mktime(0, 0, 1, 5, $Tag, 2017), mktime(23, 59, 59, 5, $Tag, 2017), 0);

//Fehlende Übergabe des Wertes an die String-Variable $VerbrauchValue"

$Verbrauch = $Verbrauch + $VerbrauchValue;			
$Tag++;

}

?>

Keine Ahnung was du da vorhast…
AC_GetAggregatedValues — IP-Symcon :: Automatisierungssoftware
Liefert ein Array, da kannst du nicht einfach + rechnen.

Und mit einem Durchschnittswert des Tages wirst du auch kaum den gesamten Monatsverbrauch ermitteln können.

Laut dem Kommentar ‚Verbrauch seit Aschebox leeren‘ wäre da eine Variable mit Archiv Typ Zähler wohl besser angebracht.

Michael

Der Code ist nur ein Ausschnitt eines Skripts.
Ich suche nach einer Möglichkeit mit einem kurzen Code den Integer Wert einer Variable zB. vom 01.07.2017 auszulesen.
Dieser Wert wird dann addiert. Mit einem Array ist das natürlich nicht möglich. Ich brauche lediglich den täglichen Max-Wert um dadurch die Differenz zum Vortag und somit einen Tagesverbrauch zu errechnen.

Mit folgendem Code funktioniert es:

while ($Tag <= ${"Tage" . $Monat}) {

$Array = AC_GetAggregatedValues(35177 /*[Archive]*/, 17246 /*[ModBus TCP/IP\Kessel\Verbrauch_seit_Aschebox_leeren_ModBusDevice\Verbrauch seit Aschebox leeren]*/, 1 /* Täglich */, mktime(0, 0, 0, $Monat, $Tag, $Jahr), mktime(23, 59, 59, $Monat, $Tag, $Jahr), 0);

foreach ($Array as $Verbrauchsarray) {
$Verbrauchswert = $Verbrauchsarray['Avg'];
}

if ($Verbrauchswert > 0) {
$Verbrauch = $Verbrauch + $Verbrauchswert;
} else {
$Verbrauch = $Verbrauch;
}

echo $Verbrauchswert . "
";

$Tag++;

}

Vielen Dank für deine Hilfe und den Hinweis mit dem Aggregationstyp.

Grüße

Albert