Projet 2
Projet 3
visiteurs
visiteurs en ligne
Ce programme en PHP est à déposer sur le serveur sous le nom foc.php.
Il permet de traiter les requêtes effectuées par la carte ESP8266 (GET et/ou PATCH).
Dans le cas d'une requête PATCH, le programme met à jour les informations en provenance d'un capteur dans le fichier data.json également sur le serveur Web.
Pour une requête GET, le programme retourne la valeur lue dans le fichier data.json vers la carte ESP8266.
Dans les deux cas, si la variable à écrire ou à lire n'est pas encore dans le fichier data.json, elle est créée dans le fichier.
La requête peut également provenir d'un navigateur pour la consultation des données (fournies par une requête PATCH) ou pour la modification des valeurs (destinées à une requête GET).
Les boutons "DEL" permettent de supprimer une variable qui n'est plus utilisée
Le bouton "Mise à jour des données" permet la mise à jour de la valeur des données de la dernière requête PATCH.
<?php
//nom du programme foc.php
if ($_SERVER["HTTP_USER_AGENT"]=="ESP8266HTTPClient")
// Client ESP8266
{
if ($_SERVER['REQUEST_METHOD']=="GET")
{
//lecture du flux d'entrée
$data = file_get_contents('php://input');
$gtab=json_decode($data,true);//création du tableau du GET
$file = fopen("data.json", "r") or die("can't open file");//création du tableau des données du fichier data.json
$ligne = fgets($file); // On lit la ligne du fichier
fclose($file);
$dtab=json_decode($ligne,true);//création du tableau data.json
//ajout des deux tableaux (avec + la valeur du premier tableau est conservée)
$newtab=$dtab + $ptab;
//création du JSON
$newdata=json_encode($newtab);
echo $newdata;// valeur en retour de la requette (l'ensemble du json)
}
if ($_SERVER['REQUEST_METHOD']=="PATCH")
{
$data = file_get_contents('php://input');//flux dans $data
$ptab=json_decode($data,true);//création du tableau associatif donné par le PATCH
$file = fopen("data.json", "r") or die("can't open file");//création du tableau des données du fichier data.json
$ligne = fgets($file); // On lit la ligne du fichier
fclose($file);
$dtab=json_decode($ligne,true);//création du tableau associatif du fichier data.json
$newtab=$ptab + $dtab;//ajout des deux tableaux (avec + la valeur du premier tableau est conservée
$newdata=json_encode($newtab);//création du JSON
//ecriture des données
$file = fopen("data.json", "w") or die("can't open file");
fwrite($file, $newdata);// ecriture de la donnée dans le fichier
fclose($file);
}
exit();
}//fin ESP
/*
elseif ($_SERVER["HTTP_USER_AGENT"]=="Java/1.8.0_92")
// Client Java
{
if ($_SERVER['REQUEST_METHOD']=="GET")
{
$file = fopen("data.json", "r") or die("can't open file");
$ligne = fgets($file); // On lit la première ligne
fclose($file);
header("Location: data.json");
// echo $ligne;// valeur en retour de la requette
}
if ($_SERVER['REQUEST_METHOD']=="PATCH")
{
$file = fopen("data.json", "w") or die("can't open file");
$data = file_get_contents('php://input');
fwrite($file, $data);// ecriture de la donnée
fclose($file);
}
}
*/
else
{
// Client navigateur
if (!empty($_POST))// modification par le navigateur
{
$ligne=$_POST['Json'];
// Le nouveau JSON est dans le $_POST => savegarde
$file = fopen("data.json", "w") or die("can't open file");
fwrite($file, $ligne);
fclose($file);
}
else //première execution du fichier (pas de $_POST => affichage du JSON)
{
if (file_exists("data.json"))
{
$file = fopen("data.json", "r") or die("can't open file");
$ligne = fgets($file); // On lit la ligne du fichier
fclose($file);
}
}
}//fin client navigateur
?>
<!doctype html>
<html lang="fr">
<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<title>Echanges avec ESP8266</title>
</head>
<style type='text/css'>
.del{font-size:22px;text-align: center;color:red;width: 60px;height: 40px;}
input{font-size:22px;text-align: center;width: 200px;height: 40px;}
input#position{width: 60px;}
input#idjson2{width: 400px;}
#texte{font-size:22px;margin-top: 5px; text-align:center}
</style>
<body>
<div id ='texte'>
OBJET CONNECTÉ<br><br>
<span id="cible"></span>
</div>
</body>
</html>
<script type="text/javascript">
//recuperation du tableau en js
var stJson = '<?php echo $ligne; ?>';
tab=JSON.parse(stJson);
texte="";
for (var key in tab)
{
if ((tab[key]=="on") || (tab[key]=="off"))
{
texte +='<input type="text" value="'+key+'"> ';
texte +='<input id="id'+key+'" type="button" name="'+key+'" value="'+tab[key]+'" onclick="modif(this.name);"> ';
texte +='<input class="del" type="button" name="'+key+'" value="DEL" onclick="sup(this.name)"><br>';
}
if ((tab[key]!="on") && (tab[key]!="off"))
{
texte +='<input type="text" value="'+key+'"> ';
texte +='<input type="text" value="'+tab[key]+'" > ';
texte +='<input class="del" type="button" name="'+key+'" value="DEL" onclick="sup(this.name)"><br>';
}
}
texte +='<form id="Form1" method="post" action=""><input id="idjson1" type="hidden" name="Json"></form>';
texte +='<input id="idjson2" type="button" value="Mise à jour des données " OnClick="newDoc()">';
document.getElementById("cible").innerHTML=texte;
function modif(cle)// modif des valeurs et sauvegarde
{
if (tab[cle]=="off")tab[cle]="on"; else tab[cle]="off";//change dans le tableau
document.getElementById("id"+cle).value=tab[cle];//change la valeur à l'écran
document.getElementById("idjson1").value=JSON.stringify(tab);//change dans le formulaire form1
document.getElementById("Form1").submit();//pour réexecuter la page avec POST pour sauvegarde dans fichier
}
function newDoc() {
window.location.assign(window.location.href);//recharge la page sans POST
}
function sup(cle)//supprime un élément du tableau
{
delete(tab[cle]);
document.getElementById("idjson1").value=JSON.stringify(tab);//change dans le formulaire form1
document.getElementById("Form1").submit();//pour réexecuter la page avec POST pour sauvegarde dans fichier
}
//-->
</script>