Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odczyt danych z pliku tekstowego
Forum PHP.pl > Forum > PHP
juzekmj
Cześć, mam taki kod który odczytuje dane z loga Digitempa (program do pomiaru temperatury). Niestety nie ja to napisałem i z moją znajomością PHP nie rozumiem do końca jak działa sad.gif

CODE
<?

$plik = file("/home/mateusz/digitemp.log");
$ilosc = count($plik);
$poczatek = $ilosc - 2;

for ($i = $poczatek; $i < $ilosc; $i++)
{
$temp = $plik[ $i ];
}

$hmm = explode(" ","$temp");

/* parametry pobierania danych z pliku */
$numer_baza = $hmm[4];
$temp_baza = $hmm[6]*1;
/* 4=numer_odczytu 6=temperatura */


$link = mysql_connect("localhost", root, 123)
or die("brak polaczenia");


$d = date('Y-m-d');
$t = date('H:i:00');

mysql_select_db("temperatura");
{
$zapytanie = "INSERT INTO `temp` (`id`, `date`, `time`, `temperatura`, `numer`) VALUES ('', '$d', '$t', '$temp_baza', '$numer_baza')";
$idzapytania = mysql_query($zapytanie);
}

?>


gdy jest podpięty jeden termometr, to kod bez problemu wyłapuje temperaturę i numer czujnika, jednak gdy podepnę ich więcej to zaczynają sie problemy. Analizowana jest tylko ostatnia linijka loga który wygląda tak:

Mar 03 17:59:25 Sensor 0 C: -0.31 F: 31.44
Mar 03 17:59:26 Sensor 1 C: 20.62 F: 69.12
Mar 03 17:59:27 Sensor 2 C: 24.50 F: 76.10
Mar 03 17:59:29 Sensor 3 C: 26.56 F: 79.81

Co mógłbym zrobić żeby dane zostały pobrane ze wszystkich (lub określonej liczby) linijek i dodane do mySQLa jako osobne rekordy?

Z góry dzięki, Mateusz smile.gif
CuteOne
Nie wiem czy będzie działać (powinno)

  1. <?php
  2.  
  3. $link = mysql_connect("localhost", root, 123) or die("brak polaczenia");
  4. mysql_select_db("temperatura", $link);
  5.  
  6. $sensors = array(0,1,2,3,4,5,6,7);
  7. $d = date('Y-m-d');
  8. $t = date('H:i:00');
  9.  
  10.  
  11. $plik = file("/home/mateusz/digitemp.log");
  12. $ilosc = count($plik);
  13.  
  14. for($i = 0; $i < $ilosc; $i++) {
  15.  
  16. $exp = explode(' ', $plik[$i]);
  17.  
  18. foreach($sensors as $list) {
  19.  
  20. if($exp[4] == $list && strtolower($exp[3]) == 'sensor') {
  21.  
  22. $num = $exp[4];
  23. $temp = $exp[6]*1;
  24.  
  25. mysql_query("INSERT INTO `temp` (`id`, `date`, `time`, `temperatura`, `numer`) VALUES ('', '$d', '$t', '$temp', '$num')");
  26. }
  27. }
  28. }
juzekmj
wow, działa! wielkie dzięki smile.gif
Fifi209
Zabijcie serwer...

fopen
fgets
feof
juzekmj
fifi209 - baza będzie aktualizowana co godzinę, a dopiero z bazy dane będą pobierane osobno dla każdego odwiedzającego. Nie będzie więc najmniejszej różnicy, przynajmniej w tym co ja chce zrobić smile.gif
Fifi209
Po pewnym czasie wrócisz z problemem, że Twój skrypt zżera za dużo ramu ;]
juzekmj
Ile mniej więcej taki skrypt zużywa ramu?! myślałem że można to liczyć w kilobajtach i z dzisiejszymi serwerami dopiero przy dziesiątkach tysięcy odwiedzin zaczynają sie problemy.. smile.gif nie mówię o najtańszych hostingach oczywiście.
Fifi209
Zależnie od rozmiaru pliku, jednak z czasem możesz przekroczyć limit ustalony w php.ini
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.