Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. PHP et MySQL
  3. Corrigé 5
Extrait - PHP et MySQL Entraînez-vous à développer une application collaborative
Extraits du livre
PHP et MySQL Entraînez-vous à développer une application collaborative Revenir à la page d'achat du livre

Corrigé 5

Prérequis

1.

a.

Dans le modèle classique que PHP implémente, c’est le navigateur qui initie les requêtes faites au serveur.

2.

d.

La réponse d est la bonne. Les websockets sont un moyen de communication bidirectionnelle. Autrement dit, le serveur peut initier des transmissions à destination de certains navigateurs avec lesquels il est en contact.

3.

c.

SMTP est un protocole d’envoi des messages électroniques, à la différence de POP ou d’IMAP qui concernent la réception.

4.

b.

SSL signifie Secure Socket Layer, la réponse b est correcte. C’est un protocole introduit dès les débuts du Web pour chiffrer les transmissions de données entre le navigateur et le serveur. Son utilisation dépasse largement le protocole HTTPS, on l’emploie par exemple pour l’échange de courriers électroniques.

5.

c.

Les applications Node.js se programment en JavaScript.

Corrigé 5.1 Création d’un fil de discussion instantané avec Node.js et socket.io

 La ligne de commande est un interprète du langage JavaScript. Des expressions ou des instructions sont analysées ou exécutées. L’interprète peut être lancé depuis n’importe quel répertoire, bien que, par souci d’organisation, les fichiers d’une application soient regroupés dans un répertoire (ici teamup).

images/C05TP01.png

 La commande npm est accessible depuis la console en ligne de Node.js. Les packages requis dans le fichier package.json et leurs dépendances sont téléchargés dans le répertoire de l’application. 

images/C05TP02.png

 En parcourant le court fichier teamupapp.js, on réalise que la page affichée est en fait index.html. 

app.get('/index', function (req, res) { 
   res.sendfile(__dirname + '/index.html'); 
}); 
images/C05TP03.png

 Le contrôleur définit l’action index() :

public function index($model) 
{ 
   $model->title = "Teamup - Chat"; 
   return $this->View($model, "index"); 
} 

 Cette partie ne comprend que des balises HTML assez habituelles :

<div class="container"> 
   <form id="formulaire_chat"> 
 
 ...

Corrigé 5.2 Envoi de message à un utilisateur défini

 Plusieurs présentations sont envisageables. Voici une approche assez simple, la liste des utilisateurs étant alimentée par un code jQuery comme étudié dans d’autres TP.

<div class="row"> 
   <div class="col"> 
       <div class="form-check"> 
         <input type="radio" id="chkAll" name="chkAll" 
value="all" class="form-check-input" checked> 
         <label class="form-check-label" for="chkAll"> 
           Discussion g&eacute;n&eacute;rale 
         </label> 
       </div> 
       <div class="form-check"> 
         <input type="radio" id="chkPrivate" name="chkAll" 
value="private" class="form-check-input">   
         <label class="form-check-label" for="chkPrivate"> 
           Discussion priv&eacute;e 
         </label> 
         <div> ...

Corrigé 5.3 Gestion du statut connecté, non disponible, déconnecté

 La liste déroulante est insérée à proximité du nom de l’utilisateur authentifié. Est également ajoutée une zone <span> qui indiquera la présence de messages en attente.

<li class="dropdown"><a href="#" class="dropdown-toggle" 
   data-toggle="dropdown"><?php  
   echo FPLGlobal::get_user_identity()->is_authenticated?FPLGlobal:: 
get_user_identity()->display_name:"Vous" ?> 
   <span id="hasmessage" style="color: red"></span><span class="caret"></span></a> 
    
   <?php require_once 'formlogin.php'; ?> 
   <select id="status" onchange="setstatus(this.value)"> 
       <option value="online">En ligne</option> 
       <option value="donotdisturb">Ne pas d&eacute;ranger</option> 
       <option value="offline">D&eacute;connect&eacute</option> 
   </select> 
</li> 

 C’est le message set-statut. Pour réaliser cette partie, le code d’initialisation de la connexion avec Node.js est déplacé dans la barre de navigation. Pour la disponibilité de messages, c’est le message...

Corrigé 5.4 Envoi des messages offline par mail avec un service Cloud

 Microsoft propose de créer un abonnement d’essai à partir de l’URL suivante : https://azure.microsoft.com/fr-fr/free

 Le service SendGrid est facilement trouvé grâce au module de recherche

images/C05TP07.png

 On choisit dans notre cas bien évidemment l’option gratuite. Les conditions générales d’utilisation doivent être acceptées pour créer le service dans le Cloud.

images/C05TP08.png

Après avoir validé la demande, Microsoft Azure prend quelques minutes pour créer la ressource. 

 L’extension CURL sert à exécuter des requêtes HTTP (comme la commande du même nom sous Unix). On peut vérifier son activation dans le fichier php.ini.

extension=curl 

 Pour commencer, les crédits de connexion au service SendGrid sont définis dans une fonction implémentée dans le fichier config.php :

/* 
* SendGrid 
*/ 
function get_sendgrid_credentials() { 
   return array("username" => "azure_xxxxxxxx", "password" => "xxxxxx"); 
} 

La méthode sendmessage() interroge cette fonction de configuration :

public function sendmessage($from,$to,$subject,$html)  
{ 
   $credentials = get_sendgrid_credentials(); 
   $url...