<?php// couche métierrequire_once"impots_05_metier.php";// gestion des erreursini_set("display_errors","off");// entête UTF-8header("Content-Type: text/plain; charset=utf-8");// ------------------------------------------------------------------------------// le service web des impôts// définition des constantes$HOTE="localhost";$PORT=3306;$BASE="dbimpots";$USER="root";$PWD="";// les données nécessaires au calcul de l'impôt ont été placées dans la table mysqL $TABLE// appartenant à la base $BASE. La table a la structure suivante// limites decimal(10,2), coeffR decimal(6,2), coeffN decimal(10,2)// les paramètres des personnes imposables (statut marital, nombre d'enfants, salaire annuel)// sont envoyés par le client sous la forme params=statut marital, nombre d'enfants, salaire annuel// les résultats (statut marital, nombre d'enfants, salaire annuel, impôt à payer) sont renvoyés au client// sous la forme <impot>impot</impot>// ou sous la forme <erreur>erreur</erreur>, si les paramètres sont invalides// on récupère la couche [métier] dans la sessionsession_start();if (!isset($_SESSION['metier'])) {// instanciation de la couche [dao] et de la couche [métier]try{$_SESSION['metier']=new ImpotsMetier(new ImpotsDaoWithMySQL($HOTE,$PORT,$BASE,$USER,$PWD));}catch (ImpotsException $ie) {print"<reponse><erreur>Erreur : ".utf8_encode($ie->getMessage() ."</erreur></reponse>");exit;}}$metier=$_SESSION['metier'];// on récupère la ligne envoyée par le client$params=utf8_encode(htmlspecialchars(strtolower(trim($_POST['params']))));//print "paramètres reçus --> $params\n";$items=explode(",",$params);// il ne doit y avoir que 3 paramètresif (count($items) !=3) {print"<reponse><erreur>[$params] : nombre de paramètres invalides</erreur></reponse>\n";exit;}//if// le premier paramètre (statut marital) doit être oui/non$marié=trim($items[0]);if ($marié!="oui"and$marié!="non") {print"<reponse><erreur>[$params] : 1er paramètre invalide</erreur></reponse>\n";exit;}//if// le second paramètre (nbre d'enfants) doit être un nombre entierif (!preg_match("/^\s*(\d+)\s*$/",$items[1],$champs)) {print"<reponse><erreur>[$params] : 2ième paramètre invalide</erreur></reponse>\n";exit;}//if$enfants=$champs[1];// le troisième paramètre (salaire) doit être un nombre entierif (!preg_match("/^\s*(\d+)\s*$/",$items[2],$champs)) {print"<reponse><erreur>[$params] : 3ième paramètre invalide</erreur></reponse>\n";exit;}//if$salaire=$champs[1];// on calcule l'impôt$impôt=$metier->calculerImpot($marié,$enfants,$salaire);// on renvoie le résultatprint"<reponse><impot>$impôt</impot></reponse>\n";// finexit;
Le format de la réponse du service web est modifiée aux lignes 35, 47, 53, 58, 64 et 71.
<?php// client impôts// gestion des erreursini_set("display_errors","off");// ---------------------------------------------------------------------------------// une classe de fonctions utilitairesclass Utilitaires {...}// main -----------------------------------------------------// définition des constantes$DATA="data.txt";$RESULTATS="resultats.txt";// données serveur$HOTE="localhost";$PORT=80;$urlServeur="/exemples-web/impots_05B_web.php";...exit;function calculerImpot($HOTE,$PORT,$urlServeur,&$cookie,$params) {// connecte le client à ($HOTE,$PORT,$urlServeur)// envoie le cookie $cookie si celui-ci est non vide. $cookie est passé par référence// envoie $params au serveur// exploite la ligne du résultat...// lecture ligne du résultat$ligne=fgets($connexion,1000);// on ferme la connexionfclose($connexion);// calcul résultat$xml=newSimpleXMLElement($ligne);$erreur=isset($xml->erreur) ?$xml->erreur :"";$impôt=isset($xml->impot) ?$xml->impot :"";// retourreturnarray($erreur,$impôt);}
ligne 32 : la réponse du serveur est lue. C'est un document XML.
ligne 36 : un objet SimpleXML est construit à partir du document XML reçu.