Hallo,

Als beginnende php-er kom ik een probleem tegen waarvan ik denk dat het veel handiger kan.

Ik heb een weerstation dat om de zoveel minuten een bestand met data upload naar mijn website (een voorbeeld: http://www.weerstationburgum.nl/weerdata/weerdata.txt).

Nu wil ik (een deel van) de variabelen uit de txt-file in een MySQL database opslaan. Ik doe het nu zo:

$openen = fopen ("http://www.weerstationburgum.nl/weerdata/weerdata.txt";, "rb");
$contents = "";
do
{
$data = fread($openen, 8192);
if (strlen($data) == 0)
break;

$contents .= $data;
} while(true);
@fclose ($openen);

$begin = "BOF";
$eind = "EOF";
$data = eregi("$BOF(.*)$EOF", $contents, $tekst1);
$destring=$tekst1[1];

// zoek temperatuur
$startpos = strpos($destring, "outsideTemp")+15;
$totaalpos = 3;
$weertemperatuur = substr($destring, $startpos, $totaalpos);


// hoogste en laagste temperatuur
$startpos = strpos($destring, "hiOutsideTemp")+17;
$totaalpos = 4;
$weertemperatuurhoog = substr($destring, $startpos, $totaalpos);

$startpos = strpos($destring, "hiOutsideTempTime")+21;
$totaalpos = 5;
$weertemperatuurhoogtijd= substr($destring, $startpos, $totaalpos);

etc etc



De gestripte variabelen sla ik op in de database. Volgens mij moet het veel makkelijk/handiger kunnen of is er één of andere functie voor. Vooral omdat de naam van de variabelen al in de tekst-file zitten.

Wie zou me willen helpen of een tip willen geven?

Alvast bedankt!
waarom:
fopen
waarom via de url als het bestand rechtstreeks te opene is

op welke manieren kan je de data vanuit het weerstantion exporteren, want als je een seperator kunt gebruiken is dat ook veel makkelijkere te verwerken
De ";" is toch in principe de seperator?
$date = "27-03-11";
$time = "16:17";
$stationDate = "27-03-11";
$stationTime = "16:17";
$utcdate = "27-03-11";
$utctime = "14:17";


En de " = " zit ook standaard tussen de "varaiabele" en de "waarde".

Ik zal nog eens uitzoeken of het ook in een andere vorm geëxporteerd kan worden.
Als het van jezelf is, en je weet dat het geen kwaad kan, een eval gebruiken?
Eindelijk een situatie gevonden waar het van pas zou kunnen komen.
oeps had de link inhoud nog niet bekeken

je kan BOF replacen met < ? php
en de EOF met ? >

wegschrijven en includen


en eval gewoon links laten liggen, niet aan denken
Ik zou gaan voor eval. Dan bespaar je het wehschrijven.
Joris van Rijn op 27/03/2011 21:31:42

Ik zou gaan voor eval. Dan bespaar je het wehschrijven.


Neuh, eval is niet nodig...

Ik ben nu wel benieuwd wat precies deze data genereert.
Karl Karl op 27/03/2011 23:13:36

[quote="Joris van Rijn op 27/03/2011 21:31:42"]
Ik zou gaan voor eval. Dan bespaar je het wehschrijven.


Neuh, eval is niet nodig...

Ik ben nu wel benieuwd wat precies deze data genereert.
[/quote]

De functie eval ken ik niet, zal eens kijken wat ik daarmee kan doen.

Even ter verduidelijking. De software van mijn weerstation stuurt elke 5 minuten de meest actuele meetgegevens naar de server. De variabelen in die file wil ik dus in de database opslaan, zodat ik daarmee queries kan doen om de gegevens weer te laten zien.

De vraag blijft, is er een makkelijker manier dan met het uitlezen van die substrings, zoals ik het nu doe....
Eval wil je niet gebruiken. Dat is gewoon niet nodig. Welke software heb je dan draaien op je weerstation?
Karl Karl op 28/03/2011 10:55:32

Eval wil je niet gebruiken. Dat is gewoon niet nodig. Welke software heb je dan draaien op je weerstation?


Na wat gepruts ben ik op het volgende gekomen wat in ieder geval handiger is dan ik had. Kan vast wel handiger, maar toch....

$begin = "BOF";
$eind = "EOF";
$data = eregi("$begin(.*)$eind", $contents, $tekst1);
$destring=$tekst1[1];
$destring = explode(";", $destring);

$i=0;
$meting = "";

foreach ($destring as $parameter) {

$positie = stripos($destring[$i], " = \"");
$parameter = substr($parameter, 2, $positie-2);
$positiebegin = stripos($destring[$i], " = \"");
$meting = substr($destring[$i], $positiebegin+4, -1);

echo "INSERT INTO table_name ($parameter) VALUES (\"$meting\")<br />\n";
$i++;

}


Ik gebruik Meteohub als koppeling tussen mijn weerstation en de website.

Na me daar ook wat meer in verdiept te hebben, blijkt dat je vanuit Meteohub bestanden automatisch kunt uploaden waarbij je zelf de opmaak bepaald. Kortom je kunt html en php bestanden maken vanuit die software. Bovenstaande dus eigenlijk niet eens meer nodig, alleen nog een cron draaiende krijgen....
Karl Karl op 28/03/2011 10:55:32

Eval wil je niet gebruiken. Dat is gewoon niet nodig. Welke software heb je dan draaien op je weerstation?


Wat is er anders aan eval() dan aan wegschrijven?
Je doet precies hetzelfde, je slaat het alleen op.

Reageren