Gambas 3/WebFormApp/HttpProtocol
= Protocole HTTP =
Le protocole HTTP spécifie comment communiquent les machines. Que dit et comment votre navigateur au serveur web puis comment le serveur répond. 
Il est important de comprendre que ça se fait par étapes comme lorsqu'on discute avec une personne : 
Envoi de Bonjour à un tiers, réponse par un bonjour, autre requête, autre réponse et ainsi de suite. 
Voici quelques liens : 
https://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol

WebServerOperation
= Comment fonctionne un serveur web =
Simplifié à l'extrême, un serveur web comme Apache écoute le réseau. 
Il reçoit une requête HTTP GET lui demandant le contenu du fichier index.html
Le serveur lit le fichier et fournit le contenu du fichier soit du code HTML. 
Dans le cas ci-dessus, le serveur a donné du contenu statique. C'est un site type carte postale ! 
Mais le serveur peut aussi passer la main à divers outils pour générer du contenu dynamiquement. C'est ce qu'il se passe avec les scripts CGI et avec notre Web form application. 
Je cite Wikipedia : le serveur HTTP exécute un programme, puis retourne le contenu généré
Le contenu du site change en fonction des interactions avec l'utilisateur. 
Lien ici : https://fr.wikipedia.org/wiki/Common_Gateway_Interface

Gambas 3/WebFormApp/WebServerOperation
= Comment fonctionne un serveur web =
Simplifié à l'extrême, un serveur web comme Apache écoute le réseau. 
Il reçoit une requête HTTP GET lui demandant le contenu du fichier index.html
Le serveur lit le fichier et fournit le contenu du fichier soit du code HTML. 
Dans le cas ci-dessus, le serveur a donné du contenu statique. C'est un site type carte postale ! 
Mais le serveur peut aussi passer la main à divers outils pour générer du contenu dynamiquement. C'est ce qu'il se passe avec les scripts CGI et avec notre Web form application. 
Je cite Wikipedia : le serveur HTTP exécute un programme, puis retourne le contenu généré
Le contenu du site change en fonction des interactions avec l'utilisateur. 
Lien ici : https://fr.wikipedia.org/wiki/Common_Gateway_Interface

Gambas 3/WebFormApp/BrowserOperation
= Comment fonctionne un navigateur =
Simplifié à l'extrême, votre navigateur met en forme le contenu trouvé sur le web. 
Il transforme les données reçues (HTML, CSS, etc.) en une jolie page colorée avec des photos, du son, etc.

Gambas 3/WebFormApp/cookie
= Cookie =
Un cookie et un fichier généré par le serveur web et transmis au navigateur (client). 
Le navigateur enregistre le fichier sur l'ordinateur de l'utilisateur puis ce fichier est envoyé par le navigateur au serveur web à chaque échange (requête). 
Le cookie contient des données utilisateur afin de permettre la navigation. 
Attention, en tant que programmeur, ne notez rien de confidentiel dans un cookie ! Au contraire, anonymisez-le ! 
Lien ici : https://fr.wikipedia.org/wiki/Cookie_(informatique) 
En testant, j'ai constaté que Gambas garde les données du côté du serveur et que le fichier côté client ne contient qu'un identifiant.

Gambas 3/WebFormApp/session
= Session =
Lorsque vous allez à un rendez-vous, vous discutez avec une personne le temps d'un entretien. 
Par analogie, la session est la discussion entre deux machines : la vôtre et le serveur (par exemple celui de Wikipédia ! 
On peut dire que la session commence lorsqu'on interroge la première fois le site et elle se termine lorsque vous fermez votre navigateur ou après un délai d'inactivité. 
Ci-dessous, voici un concept important : 
Gambas a un objet statique Session qui utilise un cookie pour retrouver les informations de l'utilisateur entre deux requêtes. 
Lien ici : https://fr.wikipedia.org/wiki/Session_(informatique)

Programmation PHP avec Symfony/Bundle
Dans Symfony, on appelle "bundle" une bibliothèque prévue pour être installée dans Symfony comme module complémentaire au framework.
Configurer un "bundle".
Après installation avec composer, il doit généralement être configuré dans le dossier config/ par un fichier YAML à son nom. Pour connaître les configurations possibles :
 php bin/console config:dump mon_bundle
La classe du "bundle" est instanciée dans :
 config/bundles.php
Pour l'activer ou le désactiver de certains environnements, il suffit de l'ajouter un paramètre. Ex :
<?php
return [
 // À instancier tout le temps
 Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
 // À instancier seulement si dans le .env, APP_ENV=dev ou APP_ENV=test (les autres sont "false" par défaut)
 Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
 // À ne pas instancier dans les environnements de dev
 Sentry\SentryBundle\SentryBundle::class => ['prod' => true],
Créer un "bundle".
Par rapport à une application classique, la création d'un bundle possède des particularités du fait qu'il n'est prévu pour être utilisé que comme dépendance d'applications tierces. Par exemple :
Principaux bundles.
Packagist propose une liste des bundles Symfony les plus utilisés.
SensioFrameworkExtraBundle.
Permet de créer des annotations.
FOS.
FriendsOfSymfony
propose plusieurs bundles intéressants, parmi lesquels :
KNP.
KNP Labs offre également plusieurs "bundles" connus, dont un paginateur.
SonataAdmin.
Ce bundle permet de créer rapidement un back-office pour lire ou modifier une base de données.
EasyAdmin.
Mêmes principales fonctions que SonataAdmin mais plus léger.
Installation :
 composer require easycorp/easyadmin-bundle
Pour l'accueil :
 bin/console make:admin:dashboard
Pour une liste paginée d'entités Doctrine modifiables, avec liens vers leurs CRUD :
 bin/console make:admin:crud
The PHP League.
Voir https://github.com/thephpleague.

Programmation PHP/Memcached
 est un système d'usage général servant à gérer la mémoire cache distribuée. Il est souvent utilisé pour augmenter la vitesse de réponse des sites web créés à partir de bases de données. Il gère les données et les objets en RAM de façon à réduire le nombre de fois qu'une même donnée stockée dans un périphérique externe est lue. Il tourne sous Unix, Windows et MacOS et est distribué selon les termes d'une licence libre dite permissive.
Utilisation en PHP.
Installation.
Pour vérifier l'installation de la bibliothèque PHP pour Memcached :
 php -i |grep memcached
 sudo pecl install memcached
Utilisation.
$memcached = new \Memcached();
$memcached->addServer('127.0.0.1', 11211);
$memcached->set('nom du test', 'valeur du test');
echo $memcached->get('nom du test');