Pisze bo wyczerpałem wszystkie pomysły.
Robie cykliczną zapiske danych do pliku. Treść takie pliku wygląda w ten sposób
0 config1: 0 1 config2: 0 2 config3: 0 3 config4: 0 4 5 pomiar: dane urzadzenia nr: 1 | data: 2013-10-22 07:32:22 6 pomiar: dane urzadzenia nr: 1 | data: 2013-10-22 07:32:21 7 pomiar: dane urzadzenia nr: 1 | data: 2013-10-22 07:32:21 8 pomiar: dane urzadzenia nr: 1 | data: 2013-10-22 07:32:20 9 pomiar: dane urzadzenia nr: 1 | data: 2013-10-22 07:32:20 10 pomiar: dane urzadzenia nr: 1 | data: 2013-10-22 07:32:19 11 pomiar: dane urzadzenia nr: 1 | data: 2013-10-22 07:32:18 12 pomiar: dane urzadzenia nr: 1 | data: 2013-10-22 07:32:18 13 pomiar: dane urzadzenia nr: 1 | data: 2013-10-22 07:32:17 14 pomiar: dane urzadzenia nr: 1 | data: 2013-10-22 07:32:17 15 pomiar: dane urzadzenia nr: 1 | data: 2013-10-22 07:32:16
liczba z lewej przy kazdym wierszu określa numer tego wiersza w tablicy. Teraz skrypt:
{ array_splice($dane, 5, 0, $data."\r"); //wstawia dane od 5 elementu tablicy, bo pierwsze 4 to linie konfiguracyjne $text=''; //bufor { foreach($dane as $line_number => $value) { if($line_number >= self::$lines_limit_on_file) //korekcja - max 15 linijek w dokumencie { } else { $text.= $dane[$line_number]; } } } else { } }
działa, ale występuje pewien problem na który wpadłem zupelnie przypadkowo. Skrypt ma na celu zapisać od 5 lini w pliku dane pomiarowe z pewnego urządzenia - cyklicznie co pare sekund. Testuje to narazie na ajaxie i gitara. Lecz gdy odpale kilka-kilkanasie razy ten sam skrypt do wykonywania - czyli stworze środowisko np kilku urzadzeń ktore zapisywałyby dane do tego samego pliku, to skrypt zaczyna sie sypac.
W pewnym momencie dochodzii do kolizji i caly plik zapisywany jest na nowo - czyli traci wszystkie linijki - łącznie z tymi konfiguracyjnymi. Problem lezy po tej stronie, że przed zablokowaniem pliku skrypt dokonuje zamiany wierszy w pliku na tablice poprzez funkcje file(). jesli kilka urzadzeń działa na tym samym pliku, to w końcu trafi się moment gdy plik zostanie zablokowany akurat wtedy gdy funkcja file() będzie tworzyć tablice. Skutkiem tego jest utworzenie niepełnej lub pustej tablicy która kasuje mi całą zawartośc pliku.
Jak to rozwiązać ? idealnym rozwiązenim byłoby stworzyć tablice pliku poprzez funkcje file() ale dopiero wtedy gdy plik jest zablokowany, a tego ni jak nie idzie zrobić. Macie jakiś pomysł ?
EDIT:
Rozwiazałem problem... Wina cały czas leżała w trybie odczytu pliku. Zamiast w+ powinno byc r+. Do zamknięcia