Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: teele - 03.02.20 - klo:21.30
-
Käytän curl -komentoa kotikoneelta palvelimen pahp:n $_POST -taulukon arvon muuttamiseen
curl -X POST -F 'y=6' http://oma_palvelin.fi/testihakemisto/testi01.php
Muutos näyttää toteutuvan, koska komento tulostaa kotikoneen päätteelle
ÅÅÅÅÅÅÅÅÅÅ 6åååååååååå 6Array
(
[y] => 6
)
</body>
</html>
mikä näyttää aika hyvältä lukuun ottamatta body- ja html-nimikkeitä.
Mutta $_POST['y'] ei näytä muuttuvan selaimen näyttämässä sivussa. Siinä näkyy vain tyhjä taulukko.
Sivun php-koodi on tällainen
<!DOCTYPE html>
<html>
<body>
<?php
$x = 1;
while($x < 8 )
{
echo( '$x on: ' . $x . '</br>' );
echo str_pad('',4096)."\n";
ob_flush();
flush();
$x = $x + 1;
if( isset($_POST['y']) )
{
print('ÅÅÅÅÅÅÅÅÅÅ ');
print($_POST['y']);
};
sleep(2);
}
//sleep(10);
if( isset($_POST['y']) )
{
print('åååååååååå ');
print($_POST['y']);
};
print_r($_POST );
?>
</body>
</html>
Tarkoituksena olisi saada näkymään curlilla lähetetty muutos sivulla, mahdollisimman nopeasti sen jälkeen, kun se on tehty. Sivun pitäisi siis näyttää muuttujan arvoja tasaisin väliajoin ja jos sivulle kerrotaan, että arvo on muuttunut, se pitäisi saada näkymään myös selaimen näyttämäällä sivulla.
Miten pitäisi sellainen sivu toteuttaa, joka näyttää vaikka lämpötilatietojen sarjan, kun mttarin lukema päivittyy tietyin väliajoin. Ehkä curl ja php eivät ole oikea tapa?
-
Käytän curl -komentoa kotikoneelta palvelimen pahp:n $_POST -taulukon arvon muuttamiseen
[...]
Mutta $_POST['y'] ei näytä muuttuvan selaimen näyttämässä sivussa. Siinä näkyy vain tyhjä taulukko.
Muuttujat ovat voimassa vain skriptin yksittäisen ajon aikana. Sessioiden avulla voisit saada arvot säilymään muistissa pidemmän istunnon yli, eli kun siirrytään vaikka sivulta toiselle, mutta sekään ei riitä tuohon, että eri istunnoissa päivitettäisiin dataa ja/tai luetaan sitä. Sitä varten data pitää tallentaa tietokantaan tai tiedostoon ja lukea sieltä.
-
Kiitos selvennyksestä
Pitää siis katsoa tiedoston käyttämistä, yritän paneutua asiaan :)
Muok.
Tarvitaan siis kaksi nettisivua, joista toinen lukee tietoja ja toinen esittää ne. Sivut käyttävät esimerkiksi samalla palvelimella olevaa tiedostoa keskinäiseen tiedonsiirtoonsa.
Kotikoneelta lähetetään sopivin väliajoin tietoa vaikka näin
// https://stackoverflow.com/questions/11600130/post-data-with-libcurl
#include <curl/curl.h>
#include <iostream>
#include <string>
#include <cstring>
#include <unistd.h> //usleep esim. sleep(500);
//using namespace std;
int main(int argc, char* argv[1]){
CURL *curl;
//CURLcode res;
std::string par1 = argv[1], par2 = argv[2];
char char_array[100]; // tämä lähetetään pyynnössä, msg1 vain apuna parametrikeräilyssä
int i = 0;
std::string s = std::to_string( i );
if(argc != 3)
{
std::cout << "usage: " << argv[0] << "parameter1 parameter2" << std::endl;
return -1;
}
while(i < 10 )
{
std::string msg1 = "x=" + par1 + " " + std::to_string( i ) +
"&y=" + par2 + " " + std::to_string( i + 1);
strcpy(char_array, msg1.c_str());
i += 2;
std::cout << msg1;
curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, " http://oma_palvelin.fi/testihakemisto/testi02.php");
curl_easy_setopt(curl, CURLOPT_POST, 1);
//curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "x=1111.11&y=212122.212");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, char_array);
//res = curl_easy_perform(curl);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
//std::cout << std::endl;
} // if
sleep(3);
} // while
return 0;
}
// tehty sudo apt-get install libcurl4-gnutls-dev
// g++ testi.cpp -o testi -lcurl -std=c++17 -Wall -pedantic
/*
tulokset näkyvät sivulla
http://oma_palvelin.fi/testihakemisto/testi01.php
jossa x näyttää muuttuvan
*/
ja katsotaan tuloksia sivulla
http://oma_palvelin.fi/testihakemisto/testi01.php