PHP: scrittura di una variabile in un file txt

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
novembre62
Prode Principiante
Messaggi: 4
Iscrizione: sabato 19 novembre 2022, 18:12

PHP: scrittura di una variabile in un file txt

Messaggio da novembre62 »

salve
premetto che sono ...molto...inesperto in materia

ho necessità di scrivere in un file txt il valore di alcune variabili che vengono lette da uno script php

lo script è questo

Codice: Seleziona tutto

#!/usr/bin/php
<?php

// This script will output a meterN compatible format for the main or live command
// You'll need to setup correct permission chmod +x
// then ln -s /var/www/comapps/reqtasmota.php /usr/bin/reqtasmota
// Request command with 'reqtasmota power'

if (isset($_SERVER['REMOTE_ADDR'])) {
    die('Direct access not permitted');
}
if (!isset($argv[1])) {
   die("Abording: no valid argument given.\n");
  } elseif ($argv[1] == 'power') {
   $url = 'http://192.168.1.42/cm?cmnd=Status%2010';
   $pagina = file_get_contents($url);
   $json_output = json_decode($pagina, true);
   $val = $json_output['StatusSNS']['ENERGY']['Power'];
   $outstr = ("10($val*w)\n");
  } elseif ($argv[1] == 'energy') {
   $url = 'http://192.168.1.42/cm?cmnd=Status%2010';
   $pagina = file_get_contents($url);
   $json_output = json_decode($pagina, true);
   $val = $json_output['StatusSNS']['ENERGY']['Today'];
   $outstr = ("10($val*w/h)\n");
           // and so on ....
   } else {
    die("Usage: reqtasmota (power | energy)\n");
   }
echo "$outstr" ;
file_put_contents("/dev/shm/metern10.txt", $outstr);




?>
come si vede...ho aggiunto la riga

Codice: Seleziona tutto

file_put_contents("/dev/shm/metern10.txt", $outstr);
è viene creato al percorso indicato il file metern10.txt con all'interno solo il primo dato letto dallo script nel formato corretto che mi serve cioè
10(97*w)

ora ho bisogno che anche il secondo dato letto dallo script venga scritto nello stesso file txt ...ovviamente insieme al primo, andando però andando a capo
esempio
10(97*w)
10(67*wh)


...non so se sono riuscito a spiegarmi e se ciò è possibile

grazie a chi può aiutarmi
TommyB1992
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 715
Iscrizione: domenica 7 luglio 2013, 15:55
Desktop: GNU/Linux
Distribuzione: Ubuntu 15.04 (i686)
Sesso: Maschile

Re: PHP: scrittura di una variabile in un file txt

Messaggio da TommyB1992 »

Sul primo punto non ho capito, perchè non so come sia la struttura dei dati json

ma sul secondo, come dice la documentazione basta che aggiungi il flag apposito:

Codice: Seleziona tutto

file_put_contents($file, $data, FILE_APPEND | LOCK_EX);
Ma penso di aver capito male quindi:

Codice: Seleziona tutto

   $val = $json_output['StatusSNS']['ENERGY']['Power'];
   $outstr = ("10($val*w)\n");

Qui basta che trovi il valore json del secondo dato letto, quindi sarà qualcosa tipo:

Codice: Seleziona tutto

   $val = $json_output['StatusSNS']['ENERGY']['Power'];
   $val2 = $json_output['StatusSNS']['ENERGY']['ALTRA_CHIAVE'];
   
   $outstr = ("10($val*w)\n10($val2*w)\n");
Logiqo.org gestionale per perizie infortunistiche.
novembre62
Prode Principiante
Messaggi: 4
Iscrizione: sabato 19 novembre 2022, 18:12

Re: PHP: scrittura di una variabile in un file txt

Messaggio da novembre62 »

grazie per la risposta

modificato lo script

Codice: Seleziona tutto

#!/usr/bin/php
<?php

// This script will output a meterN compatible format for the main or live command
// You'll need to setup correct permission chmod +x
// then ln -s /var/www/MyScripts/reqtasmota.php /usr/bin/reqtasmota
// Request command with 'reqtasmota power'

if (isset($_SERVER['REMOTE_ADDR'])) {
    die('Direct access not permitted');
}
if (!isset($argv[1])) {
   die("Abording: no valid argument given.\n");
  } elseif ($argv[1] == 'power') {
   $url = 'http://192.168.1.42/cm?cmnd=Status%2010';
   $pagina = file_get_contents($url);
   $json_output = json_decode($pagina, true);
   $val = $json_output['StatusSNS']['ENERGY']['Power'];
   $val1 = $json_output['StatusSNS']['ENERGY']['Total'];
   $val2 = $val1 * 1000;
   $outstr = ("10($val*W)\n10($val2*Wh)\n");
           // and so on ....
   } else {
    die("Usage: reqtasmota (power)\n");
   }
echo "$outstr" ;
file_put_contents("/dev/shm/metern10.txt", $outstr);




?>
ottengo il file metern10.txt nel percorso indicato e nel formato corretto, digitando su terminale
reqtasmota power

Codice: Seleziona tutto

JARVIS: MyScripts --> reqtasmota power
10(8*W)
10(3048*Wh)
ora...essendo dati di consumi elettrici, il file metern10.txt si deve aggiornare continuamente e per farlo occorre inviare continuamente il comando
" reqtasmota power ".......ma non saprei come fare, avrei bisogno di ulteriore aiuto
Avatar utente
miclab
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 448
Iscrizione: venerdì 18 gennaio 2008, 11:08
Desktop: Gnome 3
Distribuzione: Debian testing
Località: Rho

Re: PHP: scrittura di una variabile in un file txt

Messaggio da miclab »

l'esempio che ti ha fornito da TommyB1992 non va bene? Serve per mettere i nuovi dati in coda al file (append).
Dalla documentazione https://www.php.net/manual/en/function. ... ntents.php
[edit]
ho capito male la domanda, ti serve un demone che ogni tot esegua l'accodamento di nuovi dati? Crontab potrebbe fare al caso tuo?
[/edit]
novembre62
Prode Principiante
Messaggi: 4
Iscrizione: sabato 19 novembre 2022, 18:12

Re: PHP: scrittura di una variabile in un file txt

Messaggio da novembre62 »

.....si servirebbe un demone che, diciamo ogni 10 secondi aggiorni i dati
Avatar utente
miclab
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 448
Iscrizione: venerdì 18 gennaio 2008, 11:08
Desktop: Gnome 3
Distribuzione: Debian testing
Località: Rho

Re: PHP: scrittura di una variabile in un file txt

Messaggio da miclab »

su linux ci sono cron e crontab, ma dirti la differenza e come funzionano è un altro paio di maniche. Ti consiglio san google
TommyB1992
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 715
Iscrizione: domenica 7 luglio 2013, 15:55
Desktop: GNU/Linux
Distribuzione: Ubuntu 15.04 (i686)
Sesso: Maschile

Re: PHP: scrittura di una variabile in un file txt

Messaggio da TommyB1992 »

crei un file bash con questo:

Codice: Seleziona tutto

while true
do
  php /percorso/tuo/file.php
  sleep 10
done
e poi da terminale runni:
nohup bash mioscript.sh
Logiqo.org gestionale per perizie infortunistiche.
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2515
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 18.04 Bionic Beaver
Sesso: Maschile
Località: Roma, Italia

Re: PHP: scrittura di una variabile in un file txt

Messaggio da DoctorStrange »

TommyB1992 ha scritto:
mercoledì 23 novembre 2022, 21:49
crei un file bash con questo:

Codice: Seleziona tutto

while true
do
  php /percorso/tuo/file.php
  sleep 10
done
e poi da terminale runni:
nohup bash mioscript.sh
In questo modo rimarrebbe un processo perennemente appeso, ed in esecuzione sul sistema, con risorse sempre allocate.

Meglio crontab.
TommyB1992
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 715
Iscrizione: domenica 7 luglio 2013, 15:55
Desktop: GNU/Linux
Distribuzione: Ubuntu 15.04 (i686)
Sesso: Maschile

Re: PHP: scrittura di una variabile in un file txt

Messaggio da TommyB1992 »

DoctorStrange ha scritto:
mercoledì 23 novembre 2022, 22:06
In questo modo rimarrebbe un processo perennemente appeso, ed in esecuzione sul sistema, con risorse sempre allocate.

Meglio crontab.
In linea teorica sono d'accordo, in pratica se parliamo di qualche dispostivo fisico (da come ho capito) onestamente non penso che faccia differenza parlando di tempi umani.
Poi potrei sbagliarmi... Non sono un esperto riguardo il dispendio/ottimizzazione a livello server
Logiqo.org gestionale per perizie infortunistiche.
Lucio C
Prode Principiante
Messaggi: 193
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Milano

Re: PHP: scrittura di una variabile in un file txt

Messaggio da Lucio C »

miclab ha scritto:
mercoledì 23 novembre 2022, 16:45
su linux ci sono cron e crontab, ma dirti la differenza e come funzionano è un altro paio di maniche. Ti consiglio san google
Io direi piu' banalmente di leggere queste tre manpage locali

Codice: Seleziona tutto

man cron
man crontab
man 5 crontab
Il primo spiega il demone cron, il secondo il comando per editare il proprio file crontab, e il terzo descrive il formato del file crontab.
Io uso crontab per un sacco di cose ... dal mandare auguri una volta l'anno, al sincronizzare dei database una volta al giorno, al fare un probe della rete locale ogni mezz'ora tra le 8 e le 20 dei feriali (la sintassi lo consente!), al fare un fetchmail della posta ogni 5 minuti. Direi di non averlo mai fatto sotto quella frequenza. Ho degli indicatori sul desktop di cose come se certe macchine remote sono reachable, se la VPN e' on o off, se il caps lock o num lock e' on (dato che la lucina sulla tastiera e' poco visibile) che girano a 60, 30 o perfino 5 sec, ma usano una feature (FvwmScript) del mio window manager (fvwm).
Ovviamente i crontab girano sempre quando la macchina e' on anche se non la usa nessuno, gli FvwmScript girano solo quando sono loggato in una sessione X.
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
Avatar utente
miclab
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 448
Iscrizione: venerdì 18 gennaio 2008, 11:08
Desktop: Gnome 3
Distribuzione: Debian testing
Località: Rho

Re: PHP: scrittura di una variabile in un file txt

Messaggio da miclab »

Le risorse di quello script sono minime, ma non gestiscono un errore che potrebbe interrompere lo script.
Con cron stai più tranquillo se per un motivo x non gira non va in crash il demone e gira 10 secondi dopo.
novembre62
Prode Principiante
Messaggi: 4
Iscrizione: sabato 19 novembre 2022, 18:12

Re: PHP: scrittura di una variabile in un file txt

Messaggio da novembre62 »

...grazie a tutti per le risposte
per completezza di informazioni:
uso un raspberry pi 3 b+ il quale gestisce un sistema di monitoraggio dell'energia domestica ( consumi, produzione fotovoltaico, sensori vari...temperatura ecc.)..un sistema aperto per implementarlo con tanto altro....avendo le conoscenze giuste...specie di programmazione (che io non ho)
https://github.com/jeanmarc77/meterN

il file metern10.txt non viene creato e poi aggiornato eseguendo lo script sopra indicato reqtasmosta.php, ma eseguendo il comando

Codice: Seleziona tutto

reqtasmota power
come stabilito nello stesso script

allora ho creato un file bash

Codice: Seleziona tutto

#!/bin/bash

reqtasmota power
che ho chiamato aggiornapowr3.sh

poi in crontab ho aggiunto

Codice: Seleziona tutto

# Runing script.sh every 1 minuto
* * * * *  root  /var/www/MyScripts/aggiornapowr3.sh
il file viene avviato ogni minuto....puo andar bene lo stesso..... ed aggiorna il file txt che mi serve
...non so ora a livello di risorse impiegate cosa avviene....per quello che avete scritto sopra
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti