{"id":2462,"date":"2016-07-04T13:30:43","date_gmt":"2016-07-04T11:30:43","guid":{"rendered":"http:\/\/blog.nebule.org\/?page_id=2462"},"modified":"2021-11-17T22:29:41","modified_gmt":"2021-11-17T20:29:41","slug":"bootstrap","status":"publish","type":"page","link":"https:\/\/blog.nebule.org\/?page_id=2462","title":{"rendered":"bootstrap"},"content":{"rendered":"<h1>Initiateur <em>bootstrap<\/em><\/h1>\n<p><strong><span style=\"color: #ff0000;\">En cours de r\u00e9-\u00e9criture !<\/span><\/strong><\/p>\n<p style=\"text-align: justify;\">Le <em>bootstrap<\/em> est un fichier <a title=\"php\" href=\"http:\/\/php.net\" target=\"_blank\" rel=\"noopener\">PHP<\/a> unique qui fonctionne comme un initiateur des applications. Il a plusieurs r\u00f4les lors du chargement initiale d&rsquo;une page web li\u00e9e \u00e0 <em>nebule<\/em> ou un des programmes annexes :<\/p>\n<ul>\n<li style=\"text-align: justify;\">Pr\u00e9pare au besoin l&rsquo;environnement lors de l&rsquo;installation sur un nouveau serveur ;<\/li>\n<li style=\"text-align: justify;\">R\u00e9alise des tests indispensables au bon fonctionnement des applications ;<\/li>\n<li style=\"text-align: justify;\">G\u00e8re ou charge les applications.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Dans le d\u00e9tail :<\/p>\n<ol>\n<li style=\"text-align: justify;\">Lors du tout premier lancement, il v\u00e9rifie l&rsquo;environnement et cr\u00e9e au besoin ou t\u00e9l\u00e9charge ce qui manque. Il v\u00e9rifie notamment la pr\u00e9sence des dossiers &lsquo;o&rsquo; et &lsquo;l&rsquo;, et si il peut \u00e9crire dedans. Il v\u00e9rifie aussi qu&rsquo;une entit\u00e9 instance du serveur existe, et la cr\u00e9e au besoin.<\/li>\n<li style=\"text-align: justify;\">A chaque page charg\u00e9e, il fait pr\u00e9alablement une s\u00e9rie de tests rapides afin de d\u00e9tecter tout probl\u00e8me qui auraient un impact sur le bon fonctionnement des applications. Il v\u00e9rifie que les dossiers &lsquo;o&rsquo; et &lsquo;l&rsquo; sont utilisables. Il v\u00e9rifie la cryptographie lors d&rsquo;une s\u00e9rie de chiffrement\/d\u00e9chiffrement et prise d&#8217;empreinte avec des r\u00e9ponses attendues positives et n\u00e9gatives.<\/li>\n<li style=\"text-align: justify;\">Il recherche et charge la derni\u00e8re version de la librairie <em>nebule<\/em>.<\/li>\n<li style=\"text-align: justify;\">Lorsque tout se passe bien, il permet \u00e0 l&rsquo;utilisateur de s\u00e9lectionner une application disponible ou appelle l&rsquo;application par d\u00e9faut. Lorsqu&rsquo;une application a \u00e9t\u00e9 s\u00e9lectionn\u00e9e par l&rsquo;utilisateur, il retient le choix et appelle ensuite automatiquement cette application. Il recherche toujours la derni\u00e8re version de l&rsquo;application disponible avant chargement.<\/li>\n<li style=\"text-align: justify;\">A tout moment, l&rsquo;utilisateur peut faire appel au <em>bootstrap<\/em> pour changer d&rsquo;application.<\/li>\n<li style=\"text-align: justify;\">A tout moment, l&rsquo;utilisateur peut activer le mode de r\u00e9cup\u00e9ration.<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">Toute application est un objet \u00e0 part enti\u00e8re de <em>nebule<\/em>, et donc elle est non seulement compl\u00e8tement verrouill\u00e9e et v\u00e9rifiable mais sont usage est aussi compl\u00e8tement sous contr\u00f4le.<\/p>\n<p style=\"text-align: justify;\">Comme l&rsquo;organisation interne de la librairie et des programmes peut changer avec le temps, le <em>bootstrap<\/em> m\u00e9morise lors du premier lancement les identifiants des objets de la librairie et de l&rsquo;application utilis\u00e9s. Il m\u00e9morise aussi dans un \u00e9tat dit &lsquo;s\u00e9rialis\u00e9&rsquo; les instances de la librairie et de l&rsquo;application afin de r\u00e9duire les temps de chargements ult\u00e9rieurs. Ce fonctionnement permet de garder une compl\u00e8te coh\u00e9rence entre les objets et les instances des classes utilis\u00e9es mais aussi de pouvoir demander des mises \u00e0 jours des objets sans risquer de casser l&rsquo;existant. La mise en application des mises \u00e0 jours peut \u00eatre demand\u00e9 explicitement ou se faire naturellement lors de l&rsquo;expiration de la session <em>PHP<\/em>.<\/p>\n<p style=\"text-align: justify;\">Le <em>bootstrap<\/em> utilise des constantes pour d\u00e9finir son comportement g\u00e9n\u00e9rique ou le nom de certaines options. Tant que la biblioth\u00e8que en <em>PHP<\/em> orient\u00e9 objet (LIB POO) n&rsquo;est pas charg\u00e9e, le code fait r\u00e9f\u00e9rence aux constantes d\u00e9finies dans la phase d&rsquo;initialisation du <em>bootstrap<\/em> ou dans la biblioth\u00e8que en <em>PHP<\/em> proc\u00e9dural (LIB PP).<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1350\" src=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\" alt=\"favicon\" width=\"32\" height=\"32\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">Mise en place<\/h2>\n<p style=\"text-align: justify;\">Voir la page <a title=\"Installation\" href=\"http:\/\/blog.nebule.org\/?page_id=2535\">Installation<\/a> et ses pages annexes par syst\u00e8me d&rsquo;exploitation.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1350\" src=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\" alt=\"favicon\" width=\"32\" height=\"32\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">Arguments en ligne et acc\u00e8s directs<\/h2>\n<p style=\"text-align: justify;\">Les arguments permettent de contr\u00f4ler en partie le comportement du <em>bootstrap<\/em> mais depuis le poste utilisateur. Potentiellement, tout le monde ayant acc\u00e8s au serveur via un navigateur, la liste est volontairement tr\u00e8s r\u00e9duite et tr\u00e8s limit\u00e9e dans la port\u00e9e des actions permises.<\/p>\n<p style=\"text-align: justify;\">Pour modifier plus profond\u00e9ment le comportement du <em>bootstrap<\/em>, il faut passer par les options. Mais les options ne sont pas librement modifiable par tout le monde.<\/p>\n<p style=\"text-align: justify;\">Tous les arguments purement du ressort de <a title=\"nebule\" href=\"http:\/\/www.nebule.org\" target=\"_blank\" rel=\"noopener\">nebule<\/a> sont cod\u00e9es sur un seul caract\u00e8re.<\/p>\n<p style=\"text-align: justify;\">La liste\u00c2\u00a0des arguments pour la partie purement du ressort de <a title=\"nebule\" href=\"http:\/\/www.nebule.org\" target=\"_blank\" rel=\"noopener\">nebule<\/a> :<\/p>\n<ul>\n<li style=\"text-align: justify;\"><code>o<\/code> : le contenu de l&rsquo;objet. Op\u00e9rateur dont la valeur d\u00e9signe l&rsquo;objet attendu.<\/li>\n<li style=\"text-align: justify;\"><code>l<\/code> : le contenu des liens de l&rsquo;objet. Op\u00e9rateur dont la valeur d\u00e9signe l&rsquo;objet.<\/li>\n<li style=\"text-align: justify;\"><code>e<\/code> : l&rsquo;entit\u00e9 instance du serveur. Fichier contenant l&rsquo;ID de l&rsquo;entit\u00e9.<\/li>\n<li style=\"text-align: justify;\"><code>a<\/code> : l&rsquo;ID de r\u00e9f\u00e9rence de l&rsquo;application \u00e0 utiliser. Op\u00e9rateur dont la valeur d\u00e9signe l&rsquo;objet de r\u00e9f\u00e9rence.<\/li>\n<li style=\"text-align: justify;\"><code>b<\/code> : arr\u00eat du <em>bootstrap<\/em>. Commutateur.<\/li>\n<li style=\"text-align: justify;\"><code>f<\/code> : nettoyage complet de la session enregistr\u00e9e. Commutateur.<\/li>\n<li style=\"text-align: justify;\"><code>i<\/code> : affichage r\u00e9duit pour insertion \u00e0 l&rsquo;int\u00e9rieur d&rsquo;une autre page. Commutateur.<\/li>\n<li style=\"text-align: justify;\"><code>r<\/code> : mode de r\u00e9cup\u00e9ration. Commutateur.<\/li>\n<li style=\"text-align: justify;\"><code>u<\/code> : demande de chargement de la derni\u00e8re version de la biblioth\u00e8que et de l&rsquo;application. Commutateur.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Un op\u00e9rateur d\u00e9signe une cha\u00eene de texte de type <code>cl\u00e9=valeur<\/code>. Un fichier d\u00e9signe un fichier accessible directement sur le serveur sous ce nom. Un commutateur d\u00e9signe une valeur pr\u00e9sente comme argument d&rsquo;une URL et qui suffit \u00e0 activer un comportement d\u00e9fini.<\/p>\n<p style=\"text-align: justify;\">Par exemple :<\/p>\n<ul>\n<li style=\"text-align: justify;\"><code>http:\/\/server.nebule.org\/?o=6501352a9da77110e52e31338fd4801a<\/code><\/li>\n<li style=\"text-align: justify;\"><code>http:\/\/server.nebule.org\/?l=6501352a9da77110e52e31338fd4801a<\/code><\/li>\n<li><code>http:\/\/server.nebule.org\/?b<\/code><\/li>\n<li><code>http:\/\/server.nebule.org\/?a=0<\/code><\/li>\n<li><code>http:\/\/server.nebule.org\/?f&amp;r<\/code><\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Ce qui peut \u00eatre r\u00e9cup\u00e9r\u00e9 via les arguments <code>o<\/code>, <code>l<\/code> et <code>e<\/code> le sont aussi directement via l&rsquo;URL sans utiliser les arguments. Dans ce cas aucun pr\u00e9-traitement n&rsquo;est appliqu\u00e9 et applicable.<\/p>\n<p style=\"text-align: justify;\">Par exemple :<\/p>\n<ul>\n<li style=\"text-align: justify;\"><code>http:\/\/server.nebule.org\/o\/6501352a9da77110e52e31338fd4801a<\/code><\/li>\n<li style=\"text-align: justify;\"><code>http:\/\/server.nebule.org\/l\/6501352a9da77110e52e31338fd4801a<\/code><\/li>\n<li style=\"text-align: justify;\"><code>http:\/\/server.nebule.org\/e<\/code><\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Via un op\u00e9rateur, la demande se fait dans une session http avec potentiellement une entit\u00e9 d\u00e9verrouill\u00e9e. Via un argument, la demande se fait aussi dans une session http mais une \u00e9ventuelle entit\u00e9 d\u00e9verrouill\u00e9e n&rsquo;est pas utilis\u00e9e. Cela veut dire notamment que via un argument le contenu en clair d&rsquo;un objet prot\u00e9g\u00e9 ne peut \u00eatre r\u00e9cup\u00e9r\u00e9 par cette m\u00e9thode. De m\u00eame, le nom d&rsquo;un objet n&rsquo;est pas transmis lors du t\u00e9l\u00e9chargement parce qu&rsquo;on transfert un objet dont le nom est son identifiant.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1350\" src=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\" alt=\"favicon\" width=\"32\" height=\"32\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">Les quatre faces visibles<\/h2>\n<h3>Face erreurs<\/h3>\n<p style=\"text-align: justify;\">En temps normal on ne voit pas le <em>bootstrap<\/em> parce qu&rsquo;il ne se manifeste pas et appelle rapidement une application. Mais il peut se manifester en cas d&rsquo;erreur grave, c&rsquo;est sa premi\u00e8re face.<br \/>\nDans ce cas, il tourne avec une version tr\u00e8s r\u00e9duite de la librairie <em>nebule<\/em>. Hormis lors de l&rsquo;initialisation d&rsquo;une entit\u00e9 instance du serveur, il ne fait aucune modification. C&rsquo;est avant tout un affichage pour signaler une erreur.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2016\/07\/020161030-bootstrap_-_2016-10-30_19.22.10.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-2723\" src=\"\/wp-content\/uploads\/nebule\/2016\/07\/020161030-bootstrap_-_2016-10-30_19.22.10-600x479.png\" alt=\"020161030 bootstrap_-_2016-10-30_19.22.10\" width=\"600\" height=\"479\" srcset=\"\/wp-content\/uploads\/nebule\/2016\/07\/020161030-bootstrap_-_2016-10-30_19.22.10-600x479.png 600w, \/wp-content\/uploads\/nebule\/2016\/07\/020161030-bootstrap_-_2016-10-30_19.22.10.png 1024w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><br \/>\nInterruption par l&rsquo;utilisateur.<\/p>\n<p style=\"text-align: justify;\">Cette page peut \u00eatre appel\u00e9e en ajoutant \u00e0 l&rsquo;URL du serveur <code>\/?b<\/code> . On obtient une interruption de l&rsquo;utilisateur du <em>bootstrap<\/em> comme dans l&rsquo;illustration ci-dessus. Par exemple <a title=\"Interruption du bootstrap\" href=\"http:\/\/bachue.nebule.org\/?b\" target=\"_blank\" rel=\"noopener\">lien<\/a>.<\/p>\n<h3 style=\"text-align: justify;\">Face applications<\/h3>\n<p style=\"text-align: justify;\">Il peut \u00eatre appel\u00e9 aussi par l&rsquo;utilisateur pour changer d&rsquo;application, c&rsquo;est sa deuxi\u00e8me face.<br \/>\nDans ce cas, il utilise la derni\u00e8re version de la librairie <em>nebule<\/em> disponible. La pr\u00e9sentation est sobre et pr\u00e9sente \u00e0 l&rsquo;utilisateur toutes les applications qu&rsquo;il peut appeler. C&rsquo;est l&rsquo;application &lsquo;0&rsquo; (z\u00e9ro).<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2016\/11\/5e393f797adf5da6318afcde85027c454f73565fcaaff07f475e04ba5351aa62.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-2738\" src=\"\/wp-content\/uploads\/nebule\/2016\/11\/5e393f797adf5da6318afcde85027c454f73565fcaaff07f475e04ba5351aa62-600x408.png\" alt=\"5e393f797adf5da6318afcde85027c454f73565fcaaff07f475e04ba5351aa62\" width=\"600\" height=\"408\" srcset=\"\/wp-content\/uploads\/nebule\/2016\/11\/5e393f797adf5da6318afcde85027c454f73565fcaaff07f475e04ba5351aa62-600x408.png 600w, \/wp-content\/uploads\/nebule\/2016\/11\/5e393f797adf5da6318afcde85027c454f73565fcaaff07f475e04ba5351aa62.png 1024w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><br \/>\nChoix des applications.<\/p>\n<p style=\"text-align: justify;\">Cette page peut \u00eatre appel\u00e9e en ajoutant \u00e0 l&rsquo;URL du serveur <code>\/?a=0<\/code> . On obtient l&rsquo;affichage des applications disponibles comme dans l&rsquo;illustration ci-dessus. Par exemple <a title=\"Liste des applications\" href=\"http:\/\/bachue.nebule.org\/?a=0\" target=\"_blank\" rel=\"noopener\">lien<\/a>.<\/p>\n<h3 style=\"text-align: justify;\">Face pr\u00e9-chargement d&rsquo;applications<\/h3>\n<p style=\"text-align: justify;\">&#8230;<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2016\/07\/020161030-bootstrap_-_2016-10-30_20.05.05.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-2725\" src=\"\/wp-content\/uploads\/nebule\/2016\/07\/020161030-bootstrap_-_2016-10-30_20.05.05-600x408.png\" alt=\"020161030 bootstrap_-_2016-10-30_20.05.05\" width=\"600\" height=\"408\" srcset=\"\/wp-content\/uploads\/nebule\/2016\/07\/020161030-bootstrap_-_2016-10-30_20.05.05-600x408.png 600w, \/wp-content\/uploads\/nebule\/2016\/07\/020161030-bootstrap_-_2016-10-30_20.05.05.png 1024w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><br \/>\nPr\u00e9-chargement d&rsquo;une application.<\/p>\n<p style=\"text-align: justify;\">&#8230;<\/p>\n<h3 style=\"text-align: justify;\">Face premier chargement<\/h3>\n<p style=\"text-align: justify;\">&#8230;<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1350\" src=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\" alt=\"favicon\" width=\"32\" height=\"32\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">Les tests au chargement<\/h2>\n<p style=\"text-align: justify;\">.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1350\" src=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\" alt=\"favicon\" width=\"32\" height=\"32\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">Le mode de r\u00e9cup\u00e9ration<\/h2>\n<p style=\"text-align: justify;\">L&rsquo;activation de ce mode de r\u00e9cup\u00e9ration emp\u00eache simplement l&rsquo;entit\u00e9 instance du serveur et l&rsquo;entit\u00e9 par d\u00e9faut de devenir autorit\u00e9s locales. C&rsquo;est \u00e0 dire que les options qui leur permettent de devenir autorit\u00e9s locales ne sont plus pris en compte.<br \/>\nLe fait d&rsquo;\u00eatre autorit\u00e9 locale permet de g\u00e9n\u00e9rer des liens, qui seront r\u00e9ellement reconnus, pour faire des mises \u00e0 jours de la librairie et des applications au m\u00eame titre que le ma\u00eetre du code <a title=\"bachue\" href=\"http:\/\/bachue.nebule.org\/\" target=\"_blank\" rel=\"noopener\">bachue<\/a>. C&rsquo;est comme cela que l&rsquo;on peut travailler le code sign\u00e9 sans avoir recours en permanence au ma\u00eetre du code. Et c&rsquo;est aussi comme cela que l&rsquo;on peut mettre en place sa propre application sans qu&rsquo;elle soit sign\u00e9e du ma\u00eetre du code.<\/p>\n<p style=\"text-align: justify;\">L&rsquo;activation peut se faire via les arguments de l&rsquo;URL en ajoutant <code>\/?r<\/code> dans l&rsquo;URL si l&rsquo;option <em>permitOnlineRescue<\/em> est \u00e0 <em>true<\/em>. Par exemple <a title=\"Rescue mode\" href=\"http:\/\/bachue.nebule.org\/?r\" target=\"_blank\" rel=\"noopener\">lien<\/a>.<br \/>\nEn cas de besoin, option <em>modeRescue<\/em> permet \u00e0 <em>true<\/em> d&rsquo;activer et de forcer le mode de r\u00e9cup\u00e9ration sans tenir compte de l&rsquo;option <em>permitOnlineRescue<\/em>.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1350\" src=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\" alt=\"favicon\" width=\"32\" height=\"32\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">D\u00e9clarer une application<\/h2>\n<p style=\"text-align: justify;\">C&rsquo;est un acte technique qui consiste, apr\u00e8s avoir pr\u00e9parer l&rsquo;application, \u00e0 cr\u00e9er le lien de d\u00e9claration.<\/p>\n<p style=\"text-align: justify;\">Voir la page des <a title=\"Applications\" href=\"http:\/\/blog.nebule.org\/?page_id=2460\">applications<\/a> pour plus de d\u00e9tail sur la cr\u00e9ation et la d\u00e9claration des applications. Les modules ne sont pas g\u00e9r\u00e9s par le <em>bootstrap<\/em>.<\/p>\n<p style=\"text-align: justify;\">La d\u00e9claration tourne autour du mot r\u00e9serv\u00e9 <em>nebule\/objet\/interface\/web\/php\/applications<\/em> d\u00e9finissant un objet de r\u00e9f\u00e9rence des applications. Chaque application a en plus sont propre objet de r\u00e9f\u00e9rence mais utilis\u00e9 dans le contexte de l&rsquo;objet de r\u00e9f\u00e9rence des applications.<\/p>\n<p>Les liens doivent \u00eatre sign\u00e9s par le ma\u00eetre du code. Si l&rsquo;option <em>permitInstanceEntityAsAuthority<\/em>=<em>true<\/em>, les liens de l&rsquo;entit\u00e9 instance du serveur (d\u00e9finit dans le fichier <em>e<\/em>) sont aussi pris en compte. Si l&rsquo;option <em>permitDefaultEntityAsAuthority<\/em>=<em>true<\/em>, les liens de l&rsquo;entit\u00e9 par d\u00e9faut (d\u00e9finit par l&rsquo;option <em>defaultCurrentEntity<\/em>) sont aussi pris en compte. Les autres liens ne sont pas pris en compte.<\/p>\n<p><span style=\"color: #808080;\">Pour l&rsquo;instant, toutes les applications disponibles sont utilisables mais il sera possible \u00e0 terme de faire s\u00e9lectionner par l&rsquo;entit\u00e9 instance du serveur les applications utilisables. Les autres applications ne seront pas utilisables mais resteront disponibles soit pour les activer soit pour les relayer \u00e0 d&rsquo;autres serveurs.<\/span><\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1350\" src=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\" alt=\"favicon\" width=\"32\" height=\"32\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">D\u00e9roulement du code du <em>bootstrap<\/em><\/h2>\n<p style=\"text-align: justify;\">Le code du <em>bootstrap<\/em> est d\u00e9coup\u00e9 en plusieurs parties de codes afin de remplir les r\u00f4les qui lui sont d\u00e9volus (cf tout en haut).<\/p>\n<h3 style=\"text-align: justify;\">Partie 0header : ent\u00eate<\/h3>\n<p style=\"text-align: justify;\">Cette partie contient un en-t\u00eate g\u00e9n\u00e9rique et l&rsquo;initialisation de la journalisation au nom du <em>bootstrap<\/em>.<\/p>\n<p style=\"text-align: justify;\">Le buffer d&rsquo;affichage est bloqu\u00e9 pour que rien ne s&rsquo;affiche tant que ce ne sera pas pr\u00e9vu.<\/p>\n<p style=\"text-align: justify;\">Un identifiant de session <code>$bootstrapLogSession<\/code> est g\u00e9n\u00e9r\u00e9 afin d&rsquo;assurer la coh\u00e9rence du suivi des journaux. Puis les journaux sont initialis\u00e9s et un marqueur de d\u00e9marrage <code>' --- start bootstrap'<\/code> est envoy\u00e9. Ce marqueur est pr\u00e9sent \u00e0 chaque d\u00e9marrage du <em>bootstrap<\/em>, que ce soit pour le chargement d&rsquo;une page principale ou de ces sous-parties.<\/p>\n<p style=\"text-align: justify;\">Une constante, \u00e0 <em>false<\/em> par d\u00e9faut en production, active la journalisation pouss\u00e9e des activit\u00e9s du <em>bootstrap<\/em> \u00e0 des fins de d\u00e9pannage de code. Cette journalisation ne peut pas \u00eatre activ\u00e9e sauf \u00e0 modifier la valeur de la constante dans le code.<\/p>\n<h3 style=\"text-align: justify;\">Partie 1init : initialisation<\/h3>\n<p style=\"text-align: justify;\">Cette partie met en place des constantes pour d\u00e9finir l&rsquo;environnement. On initialise les constantes d\u00e9finissant les commandes communes de <em>nebule<\/em> comme le t\u00e9l\u00e9chargement des objets et de leurs liens. Ces commandes sont r\u00e9serv\u00e9es \u00e0 nebule et font une taille de 1 caract\u00e8re. Par d\u00e9faut, les commandes r\u00e9serv\u00e9es et utilis\u00e9es par le <em>bootstrap<\/em> sont <code>a<\/code>, <code>b<\/code>, <code>e<\/code>, <code>f<\/code>, <code>i<\/code>, <code>r<\/code> et <code>u<\/code>.<\/p>\n<p style=\"text-align: justify;\">Quatre constantes de d\u00e9pannage du code sont initialis\u00e9es. Ces constantes ne peuvent pas \u00eatre modifi\u00e9es sauf \u00e0 modifier leurs valeurs dans le code. Les actions des constantes :<\/p>\n<ul>\n<li style=\"text-align: justify;\">Arr\u00eat forc\u00e9, doit \u00eatre \u00e0 <em>false<\/em>. Cette constante force un arr\u00eat du <em>bootstrap<\/em>, c\u00e0d l&rsquo;affichage de l&rsquo;\u00e9cran d&rsquo;erreur avec le message <code>Internal interrupt<\/code>.<\/li>\n<li style=\"text-align: justify;\">Rechargement d&rsquo;une application lorsqu&rsquo;elle vient d&rsquo;\u00eatre pr\u00e9charg\u00e9e, doit \u00eatre \u00e0 <em>true<\/em>. Cette constante permet de d\u00e9panner le pr\u00e9-chargement des applications.<\/li>\n<li style=\"text-align: justify;\">Ne suivre que les liens des autorit\u00e9s, doit \u00eatre \u00e0 <em>true<\/em>. C&rsquo;est utilis\u00e9 lors de la recherche de la biblioth\u00e8que et des applications, permet de prendre en compte des liens d&rsquo;entit\u00e9s n&rsquo;ayant pas autorit\u00e9 sur le code.<\/li>\n<li style=\"text-align: justify;\">Une entit\u00e9 de d\u00e9veloppement, doit \u00eatre une cha\u00eene vide. L&rsquo;identifiant de l&rsquo;entit\u00e9 est ajout\u00e9 de force \u00e0 la liste des autorit\u00e9s du code. Cela permet de forcer une entit\u00e9 de d\u00e9veloppement et contourner certains probl\u00e8mes d\u00e9licats de d\u00e9pannage du code de gestion des autorit\u00e9s.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">D\u00e9sactive la journalisation pour la biblioth\u00e8que proc\u00e9durale.<\/p>\n<p style=\"text-align: justify;\">&#8230;<\/p>\n<p style=\"text-align: justify;\">Ensuite on v\u00e9rifie si l&rsquo;utilisateur n&rsquo;a pas demand\u00e9 une interruption du d\u00e9marrage du <em>bootstrap<\/em>.<\/p>\n<p style=\"text-align: justify;\">On v\u00e9rifie aussi si le fichier qui d\u00e9clare l&rsquo;entit\u00e9 instance du serveur est pr\u00e9sent. Si ce n&rsquo;est pas le cas alors on demande l&rsquo;interruption du chargement et on active la demande de premi\u00e8re synchronisation.<\/p>\n<p style=\"text-align: justify;\">Enfin, on force quelques variables et notamment des variables pour la librairie en PHP proc\u00e9dural afin d\u00e9viter une attaque par des variables pass\u00e9es en argument de l&rsquo;URL.<\/p>\n<h3 style=\"text-align: justify;\">Partie 2libpp : librairie en PHP proc\u00e9dural<\/h3>\n<p style=\"text-align: justify;\">Cette partie contient sans modification la librairie en PHP proc\u00e9dural. La constante <em>MODE_BOOTSTRAP<\/em> est \u00e0 <em>true<\/em> pour d\u00e9sactiver certaines fonctions.<\/p>\n<p style=\"text-align: justify;\">La librairie est automatiquement initialis\u00e9e au cours du chargement. Sont extraits les diff\u00e9rentes entit\u00e9s et notamment le <em>puppetmaster<\/em> ainsi que ses entit\u00e9s rattach\u00e9es.<\/p>\n<h3 style=\"text-align: justify;\">Partie 3session : session PHP<\/h3>\n<p style=\"text-align: justify;\">On commence par v\u00e9rifier si un nettoyage de la session PHP n&rsquo;a pas \u00e9t\u00e9 demand\u00e9. Si c&rsquo;est le cas on le fait imm\u00e9diatement.<\/p>\n<p style=\"text-align: justify;\">On v\u00e9rifie ensuite si il est demand\u00e9 forcer la mise \u00e0 jour de la librairie et de l&rsquo;application, et si il est demand\u00e9 de changer d&rsquo;application.<\/p>\n<p style=\"text-align: justify;\">A partir de l\u00e0 on recherche les id de la librairie et de l&rsquo;application \u00e0 utiliser depuis la session PHP. On v\u00e9rifie que les instances &lsquo;s\u00e9rialis\u00e9es&rsquo; de ceux-ci existent. Si ce n&rsquo;est pas le cas on ignore l&rsquo;id correspondant pour recharger quelque chose de propre. Si une application est bonne mais pas la librairie, on recharge compl\u00e8tement la librairie.<\/p>\n<p style=\"text-align: justify;\">Dans la session, avec l&rsquo;application, on recherche aussi les instances &lsquo;s\u00e9rialis\u00e9es&rsquo; des classes d&rsquo;affichage, d&rsquo;action et de traduction de l&rsquo;application \u00e0 utiliser.<\/p>\n<p style=\"text-align: justify;\">Si pas d&rsquo;application on lit l&rsquo;application \u00e0 utiliser par d\u00e9faut. A d\u00e9faut on utilise l&rsquo;application 0 de s\u00e9ection d&rsquo;application.<\/p>\n<p style=\"text-align: justify;\">Si pas de librairie on recharge compl\u00e8tement la librairie.<\/p>\n<h3>Partie 4libpoo : librairie en PHP orient\u00e9 objet<\/h3>\n<p style=\"text-align: justify;\">La librairie en PHP orient\u00e9 objet ayant normalement d\u00e9j\u00e0 \u00e9t\u00e9 trouv\u00e9, on se contente de charger l&rsquo;objet correspondant et de &lsquo;d\u00e9serialiser&rsquo; ou d&rsquo;instancier la classe de la librairie.<\/p>\n<h3 style=\"text-align: justify;\">Partie 5break : application de rupture<\/h3>\n<p style=\"text-align: justify;\">Cette partie d\u00e9clare une fonction d\u00e9di\u00e9e \u00e0 l&rsquo;affichage lorsqu&rsquo;il est demand\u00e9 l&rsquo;interruption du chargement du <em>bootstrap<\/em>. Il est notamment affich\u00e9 ce qui a provoqu\u00e9 l&rsquo;interruption du chargement et l&rsquo;\u00e9tat des librairies.<\/p>\n<p style=\"text-align: justify;\">&#8230;<\/p>\n<h3 style=\"text-align: justify;\">Partie 6preload : application de pr\u00e9-chargement des applications<\/h3>\n<p style=\"text-align: justify;\">Cette partie d\u00e9clare une fonction qui va pr\u00e9-charger le code de la biblioth\u00e8que puis le code de l&rsquo;application.<\/p>\n<p style=\"text-align: justify;\">Cette partie pr\u00e9-chargement peut \u00eatre un peu long sur un serveur peu performant ou tr\u00e8s occup\u00e9. Pendant le chargement, l&rsquo;utilisateur n&rsquo;a pas un \u00e9cran vide et peut patienter plus facilement.<\/p>\n<h3 style=\"text-align: justify;\">Partie 7first : application de premier chargement<\/h3>\n<p style=\"text-align: justify;\">Cette partie contient une fonction de premier lancement sur un nouveau serveur. Cela se d\u00e9roule en plusieurs \u00e9tapes incontournables.<\/p>\n<p style=\"text-align: justify;\">&#8230;<\/p>\n<h3 style=\"text-align: justify;\">Partie 8app0 : application 0<\/h3>\n<p style=\"text-align: justify;\">Cette partie d\u00e9clare l&rsquo;application 0 d\u00e9di\u00e9e \u00e0 la gestion par l&rsquo;utilisateur du changement d&rsquo;application.<\/p>\n<h3 style=\"text-align: justify;\">Partie 9router : chargement des applications<\/h3>\n<p style=\"text-align: justify;\">Si tout se passe bien on charge l&rsquo;objet correspondant \u00e0 l&rsquo;application et on &lsquo;d\u00e9serialise&rsquo; ou on instancie la classe de l&rsquo;application. En fin d&rsquo;application, on m\u00e9morise les id de la librairie et de l&rsquo;application utilis\u00e9s ainsi que leurs instances &lsquo;s\u00e9rialis\u00e9es&rsquo; vers la session PHP. On m\u00e9morise aussi les instances &lsquo;s\u00e9rialis\u00e9es&rsquo; des classes d&rsquo;affichage, d&rsquo;action et de traduction de l&rsquo;application.<\/p>\n<p style=\"text-align: justify;\">Sinon on appelle l&rsquo;application de rupture pour afficher le probl\u00e8me ou la fonction de premier chargement au besoin.<\/p>\n<p style=\"text-align: center;\"><a href=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1350\" src=\"\/wp-content\/uploads\/nebule\/2013\/08\/favicon2.png\" alt=\"favicon\" width=\"32\" height=\"32\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Initiateur bootstrap En cours de r\u00e9-\u00e9criture ! Le bootstrap est un fichier PHP unique qui fonctionne comme un initiateur des applications. Il a plusieurs r\u00f4les lors du chargement initiale d&rsquo;une page web li\u00e9e \u00e0 nebule ou un des programmes annexes : Pr\u00e9pare au besoin l&rsquo;environnement lors de l&rsquo;installation sur un nouveau serveur ; R\u00e9alise des &hellip; <a href=\"https:\/\/blog.nebule.org\/?page_id=2462\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">bootstrap<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":2460,"menu_order":1,"comment_status":"open","ping_status":"open","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/pages\/2462"}],"collection":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2462"}],"version-history":[{"count":32,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/pages\/2462\/revisions"}],"predecessor-version":[{"id":3363,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/pages\/2462\/revisions\/3363"}],"up":[{"embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/pages\/2460"}],"wp:attachment":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2462"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}