Hallo alle zusammen,
folgendes Problem in php:
Code:
<?php
$timestamp = time();
$afile = "../".date("d_m_Y",$timestamp).".dat";
$m = $_REQUEST["mins"];
$var = file($afile, FILE_IGNORE_NEW_LINES);
$lines = array_reverse($var);
$i = 0;
$out = "";
foreach($lines as $line) {
$out .= $line."\n";
$i++;
if ($i == $m) {
break;
}
}
echo $out;
?>
Ok, eine bestimmte Datei wird geöffnet, diese ist existend und wird auch nicht beschrieben (eigentlich wird die Datei alle paar Minuten um Messdaten erweitert, zur Fehlerausschließung abgeschaltet)!
Dann wird das Array mit den Zeilen umgedreht und solange wieder ausgegeben, bis entweder m Zeilen oder alles ausgegeben wurde. Also prinzipiell gibt mir das Skript so wie es da steht die letzten m Zeilen aus.
Das klappt soweit auch, aber wenn ich die Datei regelmäßig aufrufe (sagen wir im Abstand von einer Sekunde) dann stimmt die Ausgabe in 90% der Fälle. In 10% der Fälle jedoch gibt das Skript aber nicht die letzen m Zeilen sondern einen m-zeiligen Block mitten aus der Datei aus, aber lustigerweise immer den selben "falschen" Block.
Hat jemand Erfahrungen mit diesem Phänomen? Eventuell irgend ein internes lock oder
handle auf die Datei welches php nicht schnell genug wieder löst/frei gibt?
Vielen Dank und schöne Grüße,
Flips
[Edit]
Ok es hat scheinbar mit dem Server zu tun und betrifft alle file-Funktionen. Hat jemand Erfahrungen damit?
[/Edit]
Philipp F.