Echo in Datei umleiten

Wie kann ich die echo-Meldungen in eine Datei umleiten und mir damit zum debuggen ein kleines logfile schreiben? (Symbox)

Hallo und willkommen !

$newxml0 =<<<XMLDOCUMENT
QAM - WX ($uhrzeit - $datum - CET),
Temp: $temp C, Hum $hum  %
QFE:  $pressure hPa 300m AMSL
Wind: speed $windspeed (bft $bft) dir: $winddir grad
Rain: $rain mm
XMLDOCUMENT;

	$datei = fopen("/var/lib/symcon/media/wx.txt","w");
	fwrite($datei, "$newxml0\r\n");
	fclose($datei);
	//echo $newxml0."\n\n";

bei dem Beispiel kannst du einfach deine Variablen austauschen und nicht das getvalue vergessen
mit den Attributen „w“ musst du mal ändern in ein Anhängen, habs gerad nicht aufm Schirm

Hallo Alex,

klappt super - Vielen Dank

Das Datum mit QAM … sagt mit nichts - bin noch neu im PHP/Symcon-Gewerbe. Ich habe es mit fwrite($datei, „$datum, $uhrzeit, $newxml0\r\n“); gelöst.

$newxml0 =<<<XMLDOCUMENT
$Instanz_Name: Flag = $Flag, Stoppzeit = date(„H:i:s“,$StoppZeit), Laufzeit = $LaufZeit, Restzeit = date(„H:i:s“,$RestZeit)
XMLDOCUMENT;

2 kleinere Probleme:

  1. date(„H:i:s“,$StoppZeit) funktioniert so nicht, die Variable bringr aber den Integerwert.
    Muss ich für die Uhrzeiten vor dem echo eigene Stringvariable erzeugen oder gibt es einen direkteren Weg?
  2. ich möchte mehrere Variablen in einer Zeile haben. Die Zeile wird dadurch schnell unübersichtlich. Kann ich sieim xml-Teil splitten ohne im Logfile eine neue Zeile anzufangen?

noch ein drittes Problem:
ich möchte zur Laufzeit des Skripts an verschiedenen Stellen Logdatei-Einträge haben.
Muss ich dann jedes Mal des ganzen Block anhängen?

	$timestamp 			= 	time();
	$datum 				= 	date("d.m.Y",$timestamp);
	$uhrzeit 			= 	date("H:i",$timestamp);

hatte ich glatt vergessen, die Variablen vorher definieren

$vari1." - „.$vari2.“ - ".$vari3 usw

das mit den Einträgen musst du mir mal näher erklären, soll beim Ausführen eine Markierung gesetz werden ?

Hallo Alex,

mit mehreren Variablen in einer Zeile meinte ich die Variablen zwischen
$newxml0 =<<<XMLDOCUMENT und XMLDOCUMENT;
Wenn ich sie untereinander schreibe, erscheinen sie auch so im Log, sie sollen aber alle hintereinander.

Mein Ziel ist an mehreren Stellen im Skript die Variablen und einen Kommentar ins Logfile zu schreiben - eben wie mit echo zum debuggen. Auch sollen evtl. verschiedene Skripts ins gleiche logfile schreiben, um die richtige Reihenfolge zu testen (Homematic sendet bei Direkt-Verknüpfungen den Tastendruck und das eigentliche Einschalten nicht unbedingt immer in der gleichen Reihenfolge).

Die xml-Lösung schreibt aber offensichtlich immer nur dann, wenn sie komplett aufgerufen wird.

Meine jetzige Lösung ist das ganze in eine Function zu packen und diese an verschiedenen Stellen aufzurufen:
z.B. statt echo: Kommentar(„Restzeit berechnen“);

function Kommentar($hinten){
// Umleitung echo in Log-Datei
global $hist; if (!$hist){return;} // sobald alles funktioniert wird $hist einfach ausgeschaltet

global $StoppZeit;global $LaufZeit;global $RestZeit;global $gmt;global $Instanz_Name;global $Flag;global $Skriptname; // Übernahme der Skript-Variablen

$StartzeitS = date(„H:i:s“,$StartZeit);$StoppZeitS = date(„H:i:s“,$StoppZeit); $RestZeitS = date(„H:i:s“,($RestZeit+$gmt)); //Formatierung der Zeitangaben

$xml =<<<XMLDOCUMENT
$Instanz_Name/$Skriptname: Flag = $Flag, Stoppzeit = $StoppZeitS, Laufzeit = $LaufZeit, Restzeit = $RestZeitS, $hinten
XMLDOCUMENT;

echo $xml,„\n“;

$timestamp = time();
$uhrzeit = date(„H:i:s“,$timestamp);
$datum = date(„d.m.Y“,$timestamp);
$Datei_name = „/var/log/symcon/“.$Instanz_Name;
$datei = fopen($Datei_name,„a+“);
fwrite($datei, „$datum, $uhrzeit, $xml\r\n“);
fclose($datei);
}

Das tut jetzt was ich wollte und ich bekomme sogar gleichzeitig ein echo.
Ich nehme aber gerne Ratschläge entgegen, wenn etwas eleganter geht.
Vielen Dank für deine prompte Hilfe.

na wenn es läuft ist doch gut, evtl würde ich das echo dann auskommentieren wenn alles passt, da sonst im Log jedesmal eine Meldung kommt: geh mal auf Prüfen
image
da kannst du das dann sehen. (Meine 6000 Fehler kommen von einer fehlenden Reaggregation)