Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem PHP - Delimiter

Neporadil by někdo, kde je chyby?

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

$data = file_get_contents('php://input');
$soubor = fopen("./shm/text.txt", "w");
fwrite($soubor, $data);
fclose($soubor);

$data1 = explode("|", $data);

$soubor = fopen("./shm/teplota_venku", "w");
fwrite($soubor, $data1[0]);
fclose($soubor);

$soubor = fopen("./shm/vlhkost_venku", "w");
fwrite($soubor,$data1[1]);
fclose($soubor);

$soubor = fopen("./shm/signal_venku", "w");
fwrite($soubor, $data1[2]);
fclose($soubor);
?>

Notice: Undefined offset: 1 in /var/www/nacti.php on line 17
Notice: Undefined offset: 2 in /var/www/nacti.php on line 21
Jsou to tyto dva přikazy
fwrite($soubor,$data1[1]);
fwrite($soubor, $data1[2]);

Ale jinak to funguje jak ma.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Chyby budou nejspíš ve vstupním souboru, který ale neuvádíš.
Wikan 14.10.2019 10:07
Wikan
18.6|76.9|-77| Toto je vstupní soubor, který se uklada v tom php do $soubor = fopen("./shm/text.txt…
L.LX 14.10.2019 18:43
L.LX
Undefined offset naznačuje, že v poli data1 nemáš očakávané prvky 1 a 2. Však si vypíš obsah poľa, p…
pozorovateľ 15.10.2019 06:37
pozorovateľ
Ono neni co vypsat :-(
L.LX 15.10.2019 15:58
L.LX
Jakto že ne? Přece čteš nějaké hodnoty ze souboru, které "rozsekáš" a následně zapíšeš do samostatný…
host 15.10.2019 16:41
host
Ne, ono tu PHP stranku zavola ESP8266 a pošle mu to.
L.LX 15.10.2019 16:51
L.LX
Mně osobně ten tvůj kód chybu nevyhazuje a jak už tu někdo psal, asi bude chyba ve vstupních datech.…
kacikac 15.10.2019 18:18
kacikac
Tak když to načitam ze souboru, tak je to ok. $data = file_get_contents('./shm/text.txt'); print_r…
L.LX 15.10.2019 20:24
L.LX
Nebolo by zlé pridať do časti medzi čítaním a zápisom kúsok kódu, kde si skontroluješ aké dáta tam m…
pozorovateľ 15.10.2019 21:20
pozorovateľ
Už výše jem psal že není co vypisovat. Proto to take první ukladam cele - vše co přijde, a až pak ro…
L.LX 16.10.2019 15:47
L.LX
Nepíšem vypisovať ale myslím pridať nejaké riadenie správania programu. Lebo aj keď teraz vidím ten…
pozorovateľ 16.10.2019 21:07
pozorovateľ
Mam to ošetřene, nikdy nedojde nic, bud hodnota, nebo NAN. Ale tak jsem o tom uvažoval a pokud to fu… poslední
L.LX 17.10.2019 07:23
L.LX

Mně osobně ten tvůj kód chybu nevyhazuje a jak už tu někdo psal, asi bude chyba ve vstupních datech.
A i tu bylo psáno něco o file_put_contents, proč nepoužiješ todle to? Vypadá to líp.

<?php
$data = file_get_contents('input.txt');
$array = explode("|", $data);
file_put_contents('output.txt', $data);
file_put_contents('teplota_venku', $array[0]);
file_put_contents('vlhkost_venku', $array[1]);
file_put_contents('signal_venku', $array[2]);
?>

Tak když to načitam ze souboru, tak je to ok.

$data = file_get_contents('./shm/text.txt');
print_r($data);

$array = explode("|", $data);
file_put_contents('./shm/teplota_venku1', $array[0]);
print_r($array[0]);

file_put_contents('./shm/vlhkost_venku1', $array[1]);
print_r($array[1]);

file_put_contents('./shm/signal_venku1', $array[2]);
print_r($array[2]);

Když to změnim.
$data = file_get_contents('php://input');

Tak i toto vyhazuje chybu.
No ale hlavně že to funguje,dik.;-)

Nebolo by zlé pridať do časti medzi čítaním a zápisom kúsok kódu, kde si skontroluješ aké dáta tam máš. Lebo program sa ti chová rôzne len preto, že nemá vždy rovnaké podmienky. Však ale to vidíš vždy podľa obsahu toho output.txt

Raz tam máš tie tri čísla ako čakáš, inokedy tam je možno len jedno číslo. A inokedy iba nejaký text namiesto čísla, nejakú chybu.

Už výše jem psal že není co vypisovat.
Proto to take první ukladam cele - vše co přijde, a až pak rozsekam.
Na zahradě je ESP8266 ESP-01
Každou minutu se probudí, zjisti teplotu, vlhkost,´a silu signalu k wifi a odešle.

data = teplota + "|" + vlhkost + "|" + WiFi.RSSI()+ "|";
if (WiFi.status() == WL_CONNECTED) {
Serial.println(WiFi.RSSI()); // sila signalu
WiFiClient client;
HTTPClient http;
http.begin(client, "http://192.168.1.5:8888/nacti.php");
http.addHeader("Content-Type", "text/plain");
int navrat = http.POST(data);
Serial.println(navrat);
String payload = http.getString();
http.end();

Nepíšem vypisovať ale myslím pridať nejaké riadenie správania programu. Lebo aj keď teraz vidím ten kód, tak tie prvky tam idú vždy tri, prázdne či plné. (ten tretí oddelovač '|' na konci netreba).

A z toho celého mi vyplýva, že ak to niekedy tie tri prvky nevygenerovalo, tak to predtým niekde muselo padnúť do chyby a ty si parsoval nejaký chybový výpis. Ale mal by byť v takom prípade uložený v tom output.txt

Mam to ošetřene, nikdy nedojde nic, bud hodnota, nebo NAN.
Ale tak jsem o tom uvažoval a pokud to funguje.

Tak ESP8266 zavola tu PHP a pošle řetězec a je to ok.
Pokud však tu stranku spustím ja, tak to asi žadný řetězec nenačte a nebo jen prazdný string " ", takže nema co rozdělovat a žadný oddelovač '|' tam není :-)
A proto to
fwrite($soubor,$data1[1]);
fwrite($soubor, $data1[2]);

Zpět do poradny Odpovědět na původní otázku Nahoru