qs9000
29. Dezember 2008 um 04:40
1
Hallo zusammen,
ich habe jetzt eine ganze weile nach einer lösung gesucht aber nicht wirklich was produktives gefunden.
Zu meinem Problem:
Ich suche ein Script das mir beim aufruf etwas in eine Textdatei schreibt.
Etwa so: (Datum:Uhrzeit:beliebiger Text). (Text im Script definiert)
Da die Datei bereits besteht sollten die Daten angehängt werden.
Ich benötige dieses Script um die funktion von einigen komponenten auf zuverlässigkeit zu überprüfen, auf einen längeren zeitraum hin.
Gibt es etwas vergleichbares bereits, wenn ja wo?
Gruss Michael
Bitteschön:
$log_txt = "Hier Dein Text oder $Variable";
$log_time = date("d.m. H:i:s", time());
$file = IPS_GetKernelDir()."scripts\logfile.txt";
$handle=fopen($file, "a");
fwrite($handle, $log_time.", ".$log_txt."
");
fclose($handle);
Torro
29. Dezember 2008 um 07:37
3
Hallo,
aber was passiert, wenn diese Datei von zwei oder mehr Scripten beschrieben wird? Und das eventuell zur gleichen Zeit? Also ist es besser, das so zu machen:
$log_txt = "Hier Dein Text oder $Variable";
$log_time = date("d.m. H:i:s", time() );
$file = IPS_GetKernelDir()."scripts\logfile.txt";
$handle=fopen($file, "a");
$canwrite = False;
while ( !$canwrite ) {
$canwrite = flock ( $handle, LOCK_EX );
if ( !$canwrite ) {
$miliseconds = rand ( 0, 20 );
usleep ( round ( $miliseconds * 100000 ));
}
}
fwrite($handle, $log_time.", ".$log_txt."
");
fclose($handle);
Was hier noch fehlt, sind die Fehlerbehandlungen der File Operationen, also fcopen, fwrite und fclose. Auch das sollte man noch vervollstaendigen.
Hallo,
man könnte, vorausgesetzt es handelt sich um eine IPS V2, das Problem mit Mehrfachzugriffen auch über Semaphoren lösen. Dann würde Ferengi-Masters Beispielskript wie folgt aus sehen:
Ferengi-Master:
$log_txt = "Hier Dein Text oder $Variable";
$log_time = date("d.m. H:i:s", time());
$file = IPS_GetKernelDir()."scripts\logfile.txt";
if (!IPS_SemaphoreEnter("WriteLogEntry", rand(50, 100))) {
IPS_LogMessage("Skript", "Konnte Logfile-Eintrag nicht schreiben!");
exit;
}
$handle=fopen($file, "a");
fwrite($handle, $log_time.", ".$log_txt."
");
fclose($handle);
IPS_SemaphoreLeave("WriteLogEntry");
Diese Variante wartet 50 bis 100ms sollte bereits ein anderes Skript die Semaphore aufgerufen haben. Wird die Semaphore in dieser Zeit nicht freigegeben, so wird ein entsprechender Hinweis im IPS-Log geschrieben.
Slottke
29. Dezember 2008 um 12:25
5
Hallo,
so ein script hat mir noch gefehlt. Aber, warum schreibt er mir Datum und Uhrzeit als 01.01. 01.00.00, und zwar jedesmal?
Gruß
Jürgen
Hallo Jürgen,
gute Frage.
int $Timestamp fehlt :rolleyes:
Werde das oben gleich mal noch ändern.
ckerndl
29. Dezember 2008 um 14:28
7
Ist es den nicht Sinnvoller mit einer MYSQL Datenbank zu arbeiten ?
qs9000
29. Dezember 2008 um 15:35
8
Hallo zusammen,
vielen Dank für die Scripte, hilft mir sehr weiter.:)
@Torro , danke für den Hinweis des mehrfachzugriffes, da hatte ich nicht dran gedacht und werde das berücksichtigen.
@ckerndl , denke für diesen speziellen Fall ist das nicht nötig da ich nur sporadisch etwas testen möchte und keine Dauerüberwachung machen möchte aber trotzdem, Danke.
Gruß Michael
Torro:
Hallo,
aber was passiert, wenn diese Datei von zwei oder mehr Scripten beschrieben wird? Und das eventuell zur gleichen Zeit? Also ist es besser, das so zu machen:
$log_txt = „Hier Dein Text oder $Variable“;
$log_time = date(„d.m. H:i:s“, time() );
$file = IPS_GetKernelDir().„scripts\logfile.txt“;
$handle=fopen($file, „a“);
$canwrite = False;
while ( !$canwrite ) {
$canwrite = flock ( $handle, LOCK_EX );
if ( !$canwrite ) {
$miliseconds = rand ( 0, 20 );
usleep ( round ( $miliseconds * 100000 )) ;
}
}
fwrite($handle, $log_time.", „.$log_txt.“
");
fclose($handle);
Was hier noch fehlt, sind die Fehlerbehandlungen der File Operationen, also fcopen, fwrite und fclose. Auch das sollte man noch vervollstaendigen.
Was hier auch noch fehlt ist eine Klammer
Gruß
Rubberduck