Kirjoittaja Aihe: [ ratkaistu ] curlilla arvo $_POST -taulukkoon  (Luettu 1710 kertaa)

teele

  • Käyttäjä
  • Viestejä: 815
    • Profiili
Käytän curl -komentoa kotikoneelta palvelimen pahp:n $_POST -taulukon arvon muuttamiseen

Koodia: [Valitse]
curl -X POST -F 'y=6'  http://oma_palvelin.fi/testihakemisto/testi01.php

Muutos näyttää toteutuvan, koska komento tulostaa kotikoneen päätteelle

Koodia: [Valitse]
ÅÅÅÅÅÅÅÅÅÅ 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

Koodia: [Valitse]
<!DOCTYPE html>
<html>
<body>

<?php
$x 
1;
while(
$x )
  {
   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?

« Viimeksi muokattu: 13.02.20 - klo:07.31 kirjoittanut teele »

nm

  • Käyttäjä
  • Viestejä: 16242
    • Profiili
Vs: curlilla arvo $_POST -taulukkoon
« Vastaus #1 : 04.02.20 - klo:14.17 »
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ä.

teele

  • Käyttäjä
  • Viestejä: 815
    • Profiili
Vs: curlilla arvo $_POST -taulukkoon
« Vastaus #2 : 05.02.20 - klo:12.40 »
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

Koodia: [Valitse]


// 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
« Viimeksi muokattu: 17.02.20 - klo:22.12 kirjoittanut teele »