peta: Měl by sis to přečíst znovu, pak bys zjistil, že tu kecáme o něčem úplně jiném. Ano. Ze začátku jsme na to také naletěli, ale pak to pochopili. Tak snad to pochopíš i ty.
Pokud to chápu, tak problém bude zřejmě v HTTP požadavku. Chtělo by to získat aspoň ten dotaz, který se snaží poslat na server.
Klient vrací 302 na adresu, která evidentně existuje. Což v případě WZ může znamenat pouze dvě věci. Buď špatná cesta nebo neúplný HTTP požadavek.
Jak jsem již vysvětlovat, zde na WZ se uplatňuje virtualhost, takže je potřeba, aby v dotazu byla hlavička Host: hrdlickovi.wz.cz, jinak se to neodešle na správné místo.
Cesta /3w/wz.cz/h/hrdlickovi je tzv absolutní cesta z pohledu serveru. Má smysl pouze při manipulaci v serveru. Ze strany klienta tento nemá žádný efekt. Si to představ stejně jako c:\windows. Je to jen cesta ve tvém počítači. Kdokoli z venku tuto cestu nevidí.
Je mi divné, že na jiný server to jde a sem ne.
A přitom v programu vlastně změním jen IP adresu na server kde mám stránky tj. 88.86.113.152
a cestu k ménu souboru php tj. hrdlickovi.wz.cz/data.php
co myslíš tou hlavičkou? Host:
Princip fungování webu.
Zadáš adresu http://hrdlickovi.wz.cz/data.php.
Jelikož komunikace mezi počítači probíhá pouze formou IP adresy, tak je hrdlickovi.wz.cz přeloženo jako 88.86.113.152 a takto se to pak posílá na server.
Prohlížeč to přeloží a pošle jako http://88.86.113.152/data.php.
No a když zkusíš tuto adresu s IP, tak zjistíš v čem je zakopaný pes.
Aby to fungovalo správně, tak je potřeba do hlavičky přidat záznam, že se jedná o doménu hrdlickovi.wz.cz. A to se provádí právě zápisem HTTP hlavičky Host: hrdlickovi.wz.cz.
Takže ve tvém případě je potřeba zjistit, jak do http_get vložit buď doménu nebo aspoň tu hlavičku Host.
Jen tak ze zvědavosti, pokud používáš stejný kód, máš správně i příkaz dns_resolv()?
tak jsem na to asi přišel, něco mi to již posílá.
Chybělo slovo "localhost"
To "Tomik" doky za nakopnuti
http_get(88,86,113,152,'localhost.hrdlickovi.wz.cz','/data.php?teplota=22', ;
Ještě jedna věc,
Dá se vyčíst ze souboru.txt určitý počet znaků?
třeba od 5 znaku do 10...
znám jen
<?php
$filename = FOpen ("teploty.txt","r");
$txt = FGetC($filename);
echo $txt;
FClose($filex);
?>
což vypíše první znak
pak FGetC který sice vypíše určitý počet znaků který si zadám ale od začátku, ne třeba od 20 znaku
tohle mi jde :-)
<?php
$filename = FOpen ("teploty.txt","r");
fseek($filename,19);
$txt = FGetS($filename,5);
echo $txt;
FClose($filex);
?>
Koukám, že v tom souboru máš teploty oddělené středníky. To se dobře zpracovává například funkcí split() nebo strtok(). Záleží na tom, jestli ty hodnoty potřebuješ naráz nebo v cyklu.
Doporučuji každou hodnotu opatřit číslem senzoru a časovým razítkem. Každý záznam ukončit novým řádkem. Pak se to zpracovává poměrně lehce a vůbec se nemusíš trápit s funkcí fseek(). Asi takto:
s1;20111010204500;46.31
s1;20111010204600;13.31
s1;20111010204700;54.68
Čte se to pak opět funkcí fgets(), ale mnohem jednodušeji bez fseek().
Ještě jednodušší je to s databází, protože ta si časové razítko umí vygenerovat sama.
čas a datum zaznamenávám také. Jen nezobrazuji.
spíše bych potřeboval, jak ukládat hotnoty do jednotlivých řádků
a ne vše na jeden.
A to je takový problém při ukládání řádku přidat na konec "\n"?
bohužel je
($raw_udaje["T01"]/100) . ";" .
($raw_udaje["T02"]/100) . ";" .
($raw_udaje["T03"]/100) . ";" .
($raw_udaje["T04"]/100) . ";" .
($raw_udaje["T05"]/100) . ";" .
($raw_udaje["T06"]/100) . ";" .
($raw_udaje["T07"]/100) . ";" .
($raw_udaje["T08"]/100) . ";" .
($raw_udaje["T09"]/100) . ";" .
($raw_udaje["T10"]/100) . ";" .
($raw_udaje["T11"]/100) . ";" .
($raw_udaje["T12"]/100) . ";" .
($raw_udaje["T13"]/100) . ";" .
($raw_udaje["T14"]/100) . ";" .
($raw_udaje["T15"]/100) . ";" .
($raw_udaje["T16"]/100) . ";" ."\n";
$handle = fopen("teploty.txt", "w+");
$načteno = fread($handle, 70);
fwrite($handle,$text);
fclose($handle);
};
zkoušel jsem to "\n" pasovat všude ale nic.
fwrite($handle,$text."\n");
bohužel stále nic :-(
zkouším vše možné i kamaráda googla.
Moment, to v PHP na WZ musí fungovat. Běžně to používám. Ještě můžeš zkusit DOSovský formát.
Poslyš, proč tak podivně pracuješ s tím souborem, když to jde mnohem jednodušeji?
$handle = fopen("teploty.txt", "a");
fwrite($handle,$text."\r\n");
fclose($handle);
Podívej se pořádně. Mezi $text a "\r\n" není čárka, ale tečka.
PHP neumím, jedu podle knížek a netu "pokus-omyl"
Neumíš PHP a snažíš se dělat vychytávky, kterým se i já vyhýbám kvůli možným kolizím v kritické sekci? To není dobrý nápad. Vyzkoušej ten příklad, který jsem poslal v předchozím příspěvku. Samozřejmě je to kód, který přijde na server.
vše co zatím chci, je posílat data z mého zařízení do souboru.txt a z něj vyčítat na webové stránky.
Později grafy.
toto muj PHP
<?php
//
$raw_udaje["T01"] = htmlspecialchars($_GET['T01'], ENT_QUOTES, "UTF-8");
$raw_udaje["T02"] = htmlspecialchars($_GET['T02'], ENT_QUOTES, "UTF-8");
$raw_udaje["T03"] = htmlspecialchars($_GET['T03'], ENT_QUOTES, "UTF-8");
$raw_udaje["T04"] = htmlspecialchars($_GET['T04'], ENT_QUOTES, "UTF-8");
$raw_udaje["T05"] = htmlspecialchars($_GET['T05'], ENT_QUOTES, "UTF-8");
$raw_udaje["T06"] = htmlspecialchars($_GET['T06'], ENT_QUOTES, "UTF-8");
$raw_udaje["T07"] = htmlspecialchars($_GET['T07'], ENT_QUOTES, "UTF-8");
$raw_udaje["T08"] = htmlspecialchars($_GET['T08'], ENT_QUOTES, "UTF-8");
$raw_udaje["T09"] = htmlspecialchars($_GET['T09'], ENT_QUOTES, "UTF-8");
$raw_udaje["T10"] = htmlspecialchars($_GET['T10'], ENT_QUOTES, "UTF-8");
$raw_udaje["T11"] = htmlspecialchars($_GET['T11'], ENT_QUOTES, "UTF-8");
$raw_udaje["T12"] = htmlspecialchars($_GET['T12'], ENT_QUOTES, "UTF-8");
$raw_udaje["T13"] = htmlspecialchars($_GET['T13'], ENT_QUOTES, "UTF-8");
$raw_udaje["T14"] = htmlspecialchars($_GET['T14'], ENT_QUOTES, "UTF-8");
$raw_udaje["T15"] = htmlspecialchars($_GET['T15'], ENT_QUOTES, "UTF-8");
$raw_udaje["T16"] = htmlspecialchars($_GET['T16'], ENT_QUOTES, "UTF-8");
if ($raw_udaje["T01"])
{
$plny_cas = date("j.n.Y H:i:s");
$text= //$plny_cas . ";" .
($raw_udaje["T01"]/100) . ";" .
($raw_udaje["T02"]/100) . ";" .
($raw_udaje["T03"]/100) . ";" .
($raw_udaje["T04"]/100) . ";" .
($raw_udaje["T05"]/100) . ";" .
($raw_udaje["T06"]/100) . ";" .
($raw_udaje["T07"]/100) . ";" .
($raw_udaje["T08"]/100) . ";" .
($raw_udaje["T09"]/100) . ";" .
($raw_udaje["T10"]/100) . ";" .
($raw_udaje["T11"]/100) . ";" .
($raw_udaje["T12"]/100) . ";" .
($raw_udaje["T13"]/100) . ";" .
($raw_udaje["T14"]/100) . ";" .
($raw_udaje["T15"]/100) . ";" .
($raw_udaje["T16"]/100) . ";" . "\n";
$handle = fopen("teploty.txt", "a");
fwrite($handle,$text."\r\n");
fclose($handle);
};
?>
No vida, už to vypadá mnohem lépe. Jen
($raw_udaje["T16"]/100) . ";" ."\n";
uprav raději zpátky na
($raw_udaje["T16"]/100) . ";";
ať to nezlobí. Máš tam teď za sebou LF, CR, LF a za to by tě programy, které budou dělat analýzu dat, neměly rády. Normálně stačí jen LF ("\n"), ale pokud to chceš prohlížet i ve Windows, je vhodnější CR LF.
stale jsem na jednom radku
Nevím, čím to čteš, ale nyní je to perfektní:
46.87;15.62;52.5;19;21.87;15.25;167772.16;0;0;0;0;0;0;0;0;0;
46.31;15.68;52.31;18.93;21.81;15.31;167772.16;0;0;0;0;0;0;0;0;0;
46.18;15.68;52.18;19;21.81;15.25;167772.16;0;0;0;0;0;0;0;0;0;
46;15.68;52.18;19;21.81;15.31;167772.16;0;0;0;0;0;0;0;0;0;
I hexdump mi říká, že to teď nemá chybu:
000007b0 3b 30 3b 30 3b 30 3b 0d 0a 34 35 2e 37 35 3b 31 |;0;0;0;..45.75;1|
000007c0 35 2e 36 32 3b 35 32 2e 30 36 3b 31 39 3b 32 31 |5.62;52.06;19;21|
000007d0 2e 38 31 3b 31 35 2e 33 31 3b 31 36 37 37 37 32 |.81;15.31;167772|
000007e0 2e 31 36 3b 30 3b 30 3b 30 3b 30 3b 30 3b 30 3b |.16;0;0;0;0;0;0;|
000007f0 30 3b 30 3b 30 3b 0d 0a 34 35 2e 35 36 3b 31 35 |0;0;0;..45.56;15|
00000800 2e 36 32 3b 35 32 3b 31 39 3b 32 31 2e 38 31 3b |.62;52;19;21.81;|
00000810 31 35 2e 32 35 3b 31 36 37 37 37 32 2e 31 36 3b |15.25;167772.16;|
00000820 30 3b 30 3b 30 3b 30 3b 30 3b 30 3b 30 3b 30 3b |0;0;0;0;0;0;0;0;|
00000830 30 3b 0d 0a 34 35 2e 34 33 3b 31 35 2e 36 32 3b |0;..45.43;15.62;|
00000840 35 31 2e 39 33 3b 31 39 3b 32 31 2e 37 35 3b 31 |51.93;19;21.75;1|
00000850 35 2e 32 35 3b 31 36 37 37 37 32 2e 31 36 3b 30 |5.25;167772.16;0|
00000860 3b 30 3b 30 3b 30 3b 30 3b 30 3b 30 3b 30 3b 30 |;0;0;0;0;0;0;0;0|
00000870 3b 0d 0a |;..|
00000873
Mohu měřit 16 teplot.
ale stále na jednom řádku.
Všimni si, že hodnoty nemají stále stejně znaků.
46 a pak 46.18. Tím pádem to nemuhu vyčítat z řádku jak jsem chtěl.
Rozhodí se mi pak včechny další udaje
Tak si přečti jeden řádek a použij funkci
$array=split(';',trim($line));
Výsledek se uloží do pole.
Napsal jsem přečti a ne zapisuj. Když chceš analyzovat zapsaná data, tak do nich nesmíš psát.