";
if (array_key_exists('force', $_GET)) {
$force = $_GET["force"]; // Legge parametro di forzatura riscaricamento .json
} else {
$force = 0;
}
$myDateFormat = "y-m-d h:i:s";
$MAX_POLLING_TIME_MINUTES = 5; // Tempo minimo consentito tra una chiamata e l'altra
$prevDateStr = file_get_contents ("hayabusa-last-access.txt"); // Carica data ultimo accesso
$prevDate = date_create($prevDateStr);
$currDate = date_create();
$diffDate = date_diff($currDate,$prevDate)->format("%i"); // Calcola tempo trascorso da ultimo accesso
echo "Orario ultimo accesso: " . date_format($prevDate,$myDateFormat) . "
";
echo "Orario attuale: " . date_format($currDate,$myDateFormat) . "
";
echo "Minuti di differenza: " . $diffDate . "
";
echo "Trascorsi: " . $diffDate*1 . "
";
echo "Necessari: " . $MAX_POLLING_TIME_MINUTES . "
";
echo "Mancanti: " . ($MAX_POLLING_TIME_MINUTES*1 - $diffDate*1) . "
";
if (($diffDate < $MAX_POLLING_TIME_MINUTES) && ($force==0)) {
echo "Accesso non consentito, attendere" . ($MAX_POLLING_TIME_MINUTES*1 - $diffDate*1) . " minuti.
";
return(1);
}
$my_file = "hayabusa2.json";
$FileOK = false;
$SERVER1 = "http://win98.altervista.org";
$SERVER2 = "https://programmi.000webhostapp.com";
$filelastline = "H2last_log_line.txt";
$filelastspeed = "speedMS.txt";
$speedMS = "ERR0S";
$lastSpeedMS = "ERR0L";
if (array_key_exists('username', $_GET)) {
$filename = $_GET["username"]; // Legge nome utente e lo usa per impostare nome del file
} else {
$filename = "";
}
if (array_key_exists('pass', $_GET)) {
$pass = $_GET["pass"];
}
echo 'File originale: http://haya2now.jp/data/data.json
';
//////////////////////////////////////////////////////////////////////////
//// Scarica file dati originale da sito JAXA e lo salva in locale
//////////////////////////////////////////////////////////////////////////
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://haya2now.jp/data/data.json");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$file_contents = curl_exec($ch);
if($file_contents === FALSE) {
echo "Errore: " . curl_error($ch);
$FileOK = false;
} else {
echo "File scaricato, lunghezza = " . strlen($file_contents) . "
";
if (strlen($file_contents)>1000) {
$FileOK = true;
} else {
$FileOK = false;
echo "File troppo corto per essere valido, non salvo dati in log.
";
}
}
curl_close($ch);
$timestamp = date('Y') . "/" . date('m') . "/" . date('d') . " " . date('H:i:s'); // Crea timestamp in formato 24 ore GMT
if ($FileOK == true) { // file dati .json reperibile?
$handle = fopen($my_file, 'w') or die('Errore durante la CREAZIONE del file di mirroring: '. $my_file . "
"); // Crea mirror locale dati istantanei.
// Scrive nel file .json locale i dati del file .json remoto:
try {
fwrite($handle, $file_contents);
echo 'Salvato localmente come hayabusa2.json
';
echo $timestamp . " GMT
";
} catch (Exception $e) {
echo 'Errore durante la SCRITTURA sul file .json di mirroring: ', $e->getMessage(), "
";
}
///////////////////////////////////////////////////////////////////////
///////////////// Registrazione dati in file di log /////////////////
//////////////////////////////////////////////////////////////////////
// Salva nel log degli accessi l'orario di ultimo salvataggio del file .json:
$handle2 = fopen("hayalog.txt", 'a') or die("Errore durante l'APERTURA IN APPEND del file di log degli accessi: hayalog.txt.
");
try {
fwrite($handle2, "Ultimo salvataggio alle " . $timestamp . " GMT attivato da IP " . $_SERVER['REMOTE_ADDR'] . ", Browser: " . $_SERVER ['HTTP_USER_AGENT'] . "\n");
echo 'Salvato anche il log degli accessi.
';
} catch (Exception $e) {
echo 'Errore durante la SCRITTURA sul log degli accessi. ', $e->getMessage(), "
";
}
$json_dump=json_decode($file_contents); // Decodifica dati JSON
// Memorizza le variabili grezze
$ONC_A = $json_dump->status->spacecraft->ONC_A;
$RNG_LIDAR = $json_dump->status->spacecraft->RNG_LIDAR;
$GeneratedAt = $json_dump->status->spacecraft->generatedAt;
$ReceivedAt = $json_dump->status->spacecraft->receivedAt;
$UpdatedAt = $json_dump->status->updatedAt;
$THR0 = $json_dump->status->spacecraft->THR[0];
$THR1 = $json_dump->status->spacecraft->THR[1];
$THR2 = $json_dump->status->spacecraft->THR[2];
$THR3 = $json_dump->status->spacecraft->THR[3];
$THR4 = $json_dump->status->spacecraft->THR[4];
$THR5 = $json_dump->status->spacecraft->THR[5];
$THR6 = $json_dump->status->spacecraft->THR[6];
$THR7 = $json_dump->status->spacecraft->THR[7];
$THR8 = $json_dump->status->spacecraft->THR[8];
$THR9 = $json_dump->status->spacecraft->THR[9];
$THR10 = $json_dump->status->spacecraft->THR[10];
$THR11 = $json_dump->status->spacecraft->THR[11];
echo "
Dati:
";
echo "ONC_A=" . $ONC_A . "
";
echo "RNG_LIDAR=" . $RNG_LIDAR . "
";
echo "generatedAt=" . $GeneratedAt . "
";
echo "receivedAt=" . $ReceivedAt . "
";
echo "updatedAt=" . $UpdatedAt . "
";
// Elimina la T che separa data e ora
$generatedAt_Split = substr($GeneratedAt,0,10) . " " . substr($GeneratedAt,11,8);
$receivedAt_Split = substr($ReceivedAt,0,10) . " " . substr($ReceivedAt,11,8);
$updatedAt_Split = substr($UpdatedAt,0,10) . " " . substr($UpdatedAt,11,8);
//// Definisce nome per il file di log da usare /////////
if ($filename == "") { // Username non specificato
echo "Username non specificato, salvo in file generico ONC_A-log.txt.
";
$filename = "ONC_A-log"; // Nome file di default
} else {
if ($filename=="hayabusa2") { // Nome di file riservato
if ($pass!="luca"){ // Permesso solo con password
echo "Nome utente 'hayabusa2' gia' preso, sceglierne un altro.
";
exit(2);
} else { // password giusta
echo "Utente riconosciuto.\n
";
}
} else { // Username ammesso
echo "Salvo dati in file " . $filename . ".txt
";
}
}
$my_file = $filename . '.txt'; // Crea nome del file di log
//// Una volta deciso il nome del file, verifica se esiste già (e quindi se accodare i dati)
//// o se va creato da zero:
if (file_exists($my_file)) {
// Apre file in scrittura e accoda dati a quelli eventualmente esistenti:
$handle = fopen($my_file, 'a') or die("Errore nell'APERTURA IN APPEND del file di log: " . $my_file);
} else {
// Crea file da zero:
$handle = fopen($my_file, 'w') or die('Errore nella CREAZIONE del file di log: '.$my_file);
// Alla creazione del file scrive intestazioni di colonna:
try {
fwrite($handle, "Script date \tONC_A\tLIDAR\tGenerated (GMT) raw \tReceived (GMT) raw \tUpdated (GMT) raw \tGen date/time \tRec date/time \tUpd date/time \n");
} catch (Exception $e) {
echo 'Errore nella SCRITTURA sul file di log: ', $e->getMessage(), "\n";
}
}
/// Prepara riga da salvare:
$line_to_write = $timestamp . "\t"
. $ONC_A . "\t"
. $RNG_LIDAR . "\t"
. $GeneratedAt . "\t"
. $ReceivedAt . "\t"
. $UpdatedAt . "\t"
. $generatedAt_Split . "\t"
. $receivedAt_Split . "\t"
. $updatedAt_Split . "\t"
. $THR0 . "\t"
. $THR1 . "\t"
. $THR2 . "\t"
. $THR3 . "\t"
. $THR4 . "\t"
. $THR5 . "\t"
. $THR6 . "\t"
. $THR7 . "\t"
. $THR8 . "\t"
. $THR9 . "\t"
. $THR10 . "\t"
. $THR11;
//// Carica riga salvata in precedenza per verificare se quella appena preparata è
//// diversa; se è diversa lo salva, sennò non fa niente:
if (file_exists($filelastline)) { // Esiste il file che contiene la riga precedente?
echo "Trovato file con riga precedente, leggo...
";
try {
// Legge dato precedente:
$handleLastLine = fopen($filelastline, 'r') or die("Errore in APERTURA file riga precedente:" . $filelastline);
$lastline = fread($handleLastLine, filesize($filelastline));
fclose($handleLastLine);
} catch (Exception $e) {
echo 'Errore durante LETTURA ultima riga di log: ', $e->getMessage(), "
";
$lastline = "[empty]";
}
} else {
echo "File ultima riga non esiste, lo creo ora.\n";
try {
$handleLastLine = fopen($filelastline, 'w') or die('Cannot create last line of log.');
fwrite($handleLastLine, $line_to_write . "\t" . $speedMS . "\n" );
fclose($handleLastLine);
$lastline = $line_to_write;
} catch (Exception $e) {
echo "Errore nel'APRIRE o SCRIVERE in file ultima riga: ", $e->getMessage(), "\n";
}
}
echo "Vecchia riga = (" . substr($lastline,20,30) . ")
"; // Mostra vecchia riga dalvata
echo "Nuova riga = (" . substr($line_to_write,20,30) . ")
"; // Mostra nuova riga da salvare
$line_to_write[39] = "4"; ///////// DEBUG altera data////////////
$line_to_write[28] = "2"; ///////// DEBUG altera altezza (ultima cirfra LIDAR) ////////////
echo "Vecchia riga = (" . substr($lastline,20,30) . ")
"; // Mostra vecchia riga dalvata
echo "Nuova riga = (" . substr($line_to_write,20,30) . ")
"; // Mostra nuova riga da salvare
$OldRowArray = explode("\t",$lastline); // Divide vecchia riga in dati singoli
$NewRowArray = explode("\t",$line_to_write); // Divide nuova riga in dati singoli
$OldDate = $OldRowArray[6]; // Memorizza vecchia data
$NewDate = $NewRowArray[6]; // Memorizza nuova data
$OldAltitude = $OldRowArray[2]; // Memorizza vecchia altezza
$NewAltitude = $NewRowArray[2]; // Memorizza nuova altezza
$TimeDiffSec = 0;
$AltDiffMeters = 0;
echo "Data precedente: " . $OldDate . "(" . strtotime($OldDate) . ")
";
echo "Altezza precedente: " . $OldAltitude . "
";
echo "Data nuova: " . $NewDate . "(" . strtotime($NewDate) . ")
";
echo "Altezza nuova: " . $NewAltitude . "
";
if ((file_exists($filelastspeed)) && (filesize($filelastspeed))) { // Esiste il file che contiene velocità precedente? Contiene una velocità valida?
echo "Trovato file con velocita' precedente, leggo...
";
try {
// Legge dato precedente:
$handleLastSpeed = fopen($filelastspeed, 'r') or die('Cannot read last speed.');
$lastSpeedMS = fread($handleLastSpeed, filesize($filelastspeed));
fclose($handleLastSpeed);
echo "OS = '" . $lastSpeedMS . "'
";
} catch (Exception $e) {
echo 'Errore durante lettura ultima velocita: ', $e->getMessage(), "
";
$lastSpeedMS = "NOTRD"; // non letto
}
} else {
echo "File ultima velocita' non esiste o è sbagliato, lo creo ora con dato fasullo.\n";
$lastSpeedMS = "NOTF"; // non trovato il file
try {
$handleSpeed = fopen($filelastspeed, 'w') or die('Errore nella CREAZIONE del file di log della velocità: '. $filelastspeed); // Crea log istantaneo velocità (solo un valore).
fwrite($handleSpeed, $lastSpeedMS );
fclose($handleSpeed);
} catch (Exception $e) {
echo "Errore nel SALVARE velocita': ", $e->getMessage(), "\n";
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Se i dati sono diversi (tranne il timestamp iniziale relativo all'orario di avvio dello script)
// salva quello nuovo, sennò fa finta di niente:
//////////////////////////////////////////////////////////////////////////////////////////////////////
$confr_old = substr($lastline,20,30); // Stringa vecchia da confrontare (solo ONC, LIDAR e primo timestamp)
$confr_new = substr($line_to_write,20,30); // Stringa nuova da confrontare (solo ONC, LIDAR e primo timestamp)
if ( (strcmp($confr_old, $confr_new) == 0) && ($force==0) ) {
echo 'Rilevati dati uguali, non aggiorno log.
';
/*
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
*/
} else { // Se invece i dati sono diversi, faccio i calcoli:
echo 'Dati nuovi rilevati, salvo in log.
';
// Calcola variazioni di tempo e altezza, e quindi la velocità:
$TimeDiffSec = (strtotime($NewDate)-strtotime($OldDate));
$AltDiffMeters = ($NewAltitude - $OldAltitude);
if ($TimeDiffSec != 0) {
$speedMS = $AltDiffMeters/$TimeDiffSec ;
} else {
$speedMS = "INF";
}
// Salva dato attuale di velocità:
try {
$handleSpeed = fopen($filelastspeed, 'w') or die('Errore nella CREAZIONE del file di log della velocità: '. $filelastspeed); // Crea log istantaneo velocità (solo un valore).
fwrite($handleSpeed, $speedMS );
fclose($handleSpeed);
} catch (Exception $e) {
echo "Errore nel SALVARE velocita': ", $e->getMessage(), "\n";
}
// Scrive nuova riga dati nel file di log:
if (strlen($line_to_write)>50) {
try {
fwrite($handle, $line_to_write . "\t" . $speedMS . "\n");
// Salva anche in file a parte la riga appena scritto nel log principale, per verificare in seguito
// se il nuovo dato letto è diverso da quello vecchio:
$handleLastLine = fopen($filelastline, 'w') or die('Errore nella CREAZIONE del log di riga: ' . $filelastline);
try {
fwrite($handleLastLine, $line_to_write . "\t" . $speedMS . "\n" );
fclose($handleLastLine);
} catch (Exception $e) {
echo 'Errore nella SCRITTURA del log di riga: ', $e->getMessage(), "\n";
}
} catch (Exception $e) {
echo 'Errore nella CREAZIONE del log di riga: ', $e->getMessage(), "\n";
}
echo "Differenza date: " . $TimeDiffSec . "
";
echo "Differenza altezze: " .$AltDiffMeters . "
";
//if ($speedMS == 0) $speedMS = $lastSpeedMS; // E' impossibile che sia esattamente zero
echo "Vecchia velocità : " . $lastSpeedMS . "
";
echo "Nuova velocità calcolata: " . $speedMS . "
";
}
file_put_contents ("hayabusa-last-access.txt" ,date_format($currDate,$myDateFormat). "\n" ); // Considera valido l'accesso solo se i dati letti erano diversi.
} // Fine caso "dati diversi"
} else { // In caso di errore in lettura file di dati...
// Salva nel log degli accessi l'errore di lettura del file di dati:
$handle2 = fopen("hayalog.txt", 'a') or die('Cannot create file hayalog.txt');
try {
fwrite($handle2, "Errore, file .json vuoto letto alle " . $timestamp . " GMT");
echo "Errore in file .json alle " . $timestamp . " GMT, dati non salvati in log.
";
} catch (Exception $e) {
echo 'Errore durante la scrittura nel log degli accessi. ', $e->getMessage(), "
";
}
}
////////////////////////////////////////////////////////////
//////////////////////// Chiamo anche logger per Osiris
//////////////////////// Tutte le variabili iniziano per OSIRIS per
/////////////////////// evitare conflitti col resto dello script.
////////////////////////////////////////////////////////////
// $timestamp = "2018/10/17 16:33:19 GMT"
$OSIRIScurrYearShort = substr($timestamp,2,2);
$OSIRIScurrMonth = substr($timestamp,5,2);
$OSIRIScurrDay = substr($timestamp,8,2);
$OSIRISimgUrl = "http://programmi.000webhostapp.com/osiris/osiris-retriever.php?year=" . $OSIRIScurrYearShort . "&month=" . $OSIRIScurrMonth . "&day=" . $OSIRIScurrDay;
echo 'Chiamo logger Osiris: (' . $OSIRISimgUrl . ')
';
$OSIRISloggerResult = file_get_contents($OSIRISimgUrl);
echo "Risposta: " . $OSIRISloggerResult;
////////////////////////////////////////////////////////////
//////////////////////// Chiamo anche logger colonnine di ricarica
//////////////////////// Tutte le variabili iniziano per RICARICA per
/////////////////////// evitare conflitti col resto dello script.
////////////////////////////////////////////////////////////
$RICARICAimgUrl = "http://programmi.000webhostapp.com/colonnine/logger.php?year=" . $OSIRIScurrYearShort . "&month=" . $OSIRIScurrMonth . "&day=" . $OSIRIScurrDay;
echo 'Chiamo logger colonnine: (' . $RICARICAimgUrl . ')
';
$RICARICAimgUrl = file_get_contents($RICARICAimgUrl);
echo "Risposta: " . $RICARICAimgUrl;
?>