out of memory v2.0 -> v2.1

Moin,

habe die Migration von 2.0 auf 2.1 fast abgeschlossen. Alle Problemchen behoben bis auf folgendes:

Bei diesem Skript kommt die Fehlermeldung: Out of memory!

// Heavy Weather Datei auslesen

$i = 1;
$handle = fopen ("/HeavyWeather/currdat.lst", "r");
while (!feof($handle))
	{
   $buffer = fgets($handle, 4096);
   $var[$i] = $buffer;
   $i = $i + 1;
	}
fclose ($handle);

// Variablen

$wpic = 39142 /*[.Heavy Weather\Wetterbild]*/;
$tend = 51540 /*[.Heavy Weather\Tenzdenz]*/;
$Tin = 12634 /*[.Heavy Weather\Innentemp]*/;
$Tout = 17444 /*[.Heavy Weather\Aussentemp]*/;
$Fin = 48962 /*[.Heavy Weather\Innenfeuchte]*/;
$Fout = 16189 /*[.Heavy Weather\Aussenfeuchte]*/;
$Tau = 55131 /*[.Heavy Weather\Taupunkt]*/;
$Tgef = 39979 /*[.Heavy Weather\gef_Temp]*/;
$Wgesch = 36493 /*[.Heavy Weather\Windgeschwindigkeit]*/;
$Wricht = 57431 /*[.Heavy Weather\Windrichtung_Grad]*/;
$Wrich = 30372 /*[.Heavy Weather\Windrichtung]*/;
$Rges = 20621 /*[.Heavy Weather\Regen_ges]*/;
$R24 = 47517 /*[.Heavy Weather\Regen_24h]*/;
$R1 = 17288 /*[.Heavy Weather\Regen_1h]*/;
$abs = 31198 /*[.Heavy Weather\Druck_abs]*/;
$rel = 11569 /*[.Heavy Weather\Druck_rel]*/;


// Wetterbild (-1=not valid, 0=rain, 1=cloud, 2=sun)

setValueInteger($wpic,(integer)str_replace('number = ','',$var[17]));

// Wettertendenz (-1=not valid, 0=no change, 1=air pressure rising, 2=air pressure falling)

setValueInteger($tend,(integer)str_replace('number = ','',$var[22]));

// Temperatur innen

setValueFloat($Tin,(float)str_replace('"','',str_replace('deg_C = ','',$var[25])));

// Temperatur aussen

setValueFloat($Tout,(float)str_replace('"','',str_replace('deg_C = ','',$var[29])));

// rel. Feuchtigkeit innen

setValueFloat($Fin,(float)str_replace('"','',str_replace('percent = ','',$var[33])));

// rel. Feuchtigkeit aussen

setValueFloat($Fout,(float)str_replace('"','',str_replace('percent = ','',$var[36])));

// Taupunkt

setValueFloat($Tau,(float)str_replace('"','',str_replace('deg_C = ','',$var[39])));

// gefühlte Temperatur

setValueFloat($Tgef,(float)str_replace('"','',str_replace('deg_C = ','',$var[43])));

// Windgeschwindigkeit

setValueFloat($Wgesch,(float)str_replace('"','',str_replace('kmh = ','',$var[48])));

// Windrichtung (Grad)

setValueFloat($Wricht,(float)str_replace('"','',str_replace('deg = ','',$var[54])));

// Windrichtung

setValueString($Wrich,str_replace('"','',str_replace('name = ','',$var[55])));

// Regenmenge

setValueFloat($Rges,(float)str_replace('"','',str_replace('mm = ','',$var[58])));
setValueFloat($R24,(float)str_replace('"','',str_replace('mm = ','',$var[62])));
setValueFloat($R1,(float)str_replace('"','',str_replace('mm = ','',$var[66])));

// Druckverhältnisse

setValueFloat($abs,(float)str_replace('"','',str_replace('hpa = ','',$var[70])));
setValueFloat($rel,(float)str_replace('"','',str_replace('hpa = ','',$var[74])));

// INT Umwandlung

$float = 17444 /*[.Heavy Weather\Aussentemp]*/;
$int = 20819 /*[.Heavy Weather\int_Aussentemp]*/;

setValueInteger($int,(integer)getValueFloat($float));

$float = 36493 /*[.Heavy Weather\Windgeschwindigkeit]*/;
$int = 29654 /*[.Heavy Weather\int_Windgeschw]*/;

setValueInteger($int,(integer)getValueFloat($float));

Fehler tritt wohl in diesem Bereich auf - übersichtshalber hab ich aber mein ganzes Skript gepostet:

// Heavy Weather Datei auslesen

$i = 1;
$handle = fopen ("/HeavyWeather/currdat.lst", "r");
while (!feof($handle))
	{
   $buffer = fgets($handle, 4096);
   $var[$i] = $buffer;
   $i = $i + 1;
	}
fclose ($handle);

greetz Daniel

Hallo Daniel,

setz mal die „4096“ beim Befehl „fgets“ auf einen niedrigeren Wert (100 … 200).

Ich kenn den Inhalt der Datei zwar nicht im Detail, aber ich glaube kaum, dass 4096 Byte pro Zeile nötig sind!


   $buffer = fgets($handle, 4096);

Ich bezweifle stark, dass es an der Version 2.1 liegt :wink:

Frage ist, wie groß die .lst Datei ist? Du liest ja komplett ein und das Memory Limit bei PHP ist 8MB.

paresy

Das ist ja eigentlich das komische…die Datei hat lediglich 7kb (!) und das Skript funktioniert bei 2.0 tadellos, spiel ich das ganze auf 2.1 kommt die komische Meldung.

Hatte gestern 2.1 auf meinem Notebook zum laufen gebracht, und bis auf obiges Problem eigenltich fehlerfrei. So, spiel ich das ganze jetzt auf den Server auf (Dienst stoppen, deinstallieren, neuen Dienst installieren -> PC neustarten) so geht gar nichts mehr… Es scheint als ob die Skripte gar nicht mehr abgearbeitet werden…im Meldungsfenster erscheint lediglich noch „Socket open“ „Socket closed“ im 5sec Rythmus. Öffne ich die PHP Ansicht wird NICHTS abgearbeitet. Alle Ausführungszähler sind auf 0.

Wie gesagt: v2.1 Installation hat am Notebook einwandfrei funktioniert.

Woran kann das liegen?

greetz Daniel

Lies die Datei mal mit PHP: file - Manual ein. Das macht genau das was du willst in 1 Zeile :wink:

paresy

Hi paresy,

werd ich machen, thx…nur sollte ich zuerst die v2.1 aufm Server zum laufen bringen, denn da rührt sich imho grad gar nix (siehe oben) :wink: