<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://www.ainw.org/wiki/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>Mon wiki - informatique:langages:php</title>
        <description></description>
        <link>https://www.ainw.org/wiki/</link>
        <lastBuildDate>Mon, 04 May 2026 11:38:06 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://www.ainw.org/wiki/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
            <title>Mon wiki</title>
            <link>https://www.ainw.org/wiki/</link>
        </image>
        <item>
            <title>array_pop_vs._array_shift</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:array_pop_vs._array_shift&amp;rev=1735838913&amp;do=diff</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;array_pop_vs_array_shift&quot;&gt;array_pop vs. array_shift&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
La fonction &lt;code&gt;array_pop&lt;/code&gt; permet d&amp;#039;extraire le dernier élément d&amp;#039;un tableau tandis que &lt;code&gt;array_shift&lt;/code&gt; permet d&amp;#039;extraire le premier élément d&amp;#039;un tableau.
La finalité de ces fonctions est similaire mais il faut prêter attention aux performances car &lt;code&gt;array_shift&lt;/code&gt; doit recalculer les index, ce qui n&amp;#039;est pas le cas de &lt;code&gt;array_pop&lt;/code&gt;.
Pour un tableau de petite taille, la différence est imperceptible mais quand sa taille augmente, cette différence se fait bien sentir.
En effet, la complexité de &lt;code&gt;array_pop&lt;/code&gt; est de &lt;code&gt;O(1)&lt;/code&gt; tandis que celle de &lt;code&gt;array_shift&lt;/code&gt; est de &lt;code&gt;O(n)&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
Voici un exemple pour s&amp;#039;en convaincre :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;dl class=&quot;code&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://www.ainw.org/wiki/doku.php?do=export_code&amp;amp;id=informatique:langages:php:array_pop_vs._array_shift&amp;amp;codeblock=0&quot; title=&quot;Télécharger cet extrait&quot; class=&quot;mediafile mf_php&quot;&gt;benchmark.php&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;re0&quot;&gt;$shift&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array_fill&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_fill&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1000000&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/uniqid&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;uniqid&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$pop&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$shift&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;array_shift processing: &#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$shiftStart&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/microtime&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;microtime&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!==&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array_shift&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_shift&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$shift&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/microtime&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;microtime&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$shiftStart&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; PHP_EOL&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;array_pop processing: &#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$popStart&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/microtime&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;microtime&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;!==&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array_pop&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_pop&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$pop&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/microtime&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;microtime&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$popStart&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; PHP_EOL&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>composer</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:composer&amp;rev=1735838913&amp;do=diff</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;composer&quot;&gt;Composer&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.ainw.org/wiki/lib/exe/fetch.php?w=100&amp;amp;tok=cbc079&amp;amp;media=informatique:logo:composer.png&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;100&quot; /&gt;
C&amp;#039;est un gestionnaire de dépendance libre écrit en PHP. Il permet à ses utilisateurs de déclarer et d&amp;#039;installer les bibliothèques dont le projet principal a besoin.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Composer&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;composer&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-243&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;commandes_utiles&quot;&gt;Commandes utiles&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Mise à jour de Composer&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;composer self-update
&lt;span class=&quot;co0&quot;&gt;# Ou&lt;/span&gt;
composer selfupdate&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Ajout d&amp;#039;un paquet dans la configuration&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Cette commande va ajouter un paquet dans la configuration dans la section appropriée.
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# Ajout d&#039;un paquet pour l&#039;ensemble des environnements.&lt;/span&gt;
composer require &lt;span class=&quot;re5&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;paquet&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Ajout d&#039;un paquet pour l&#039;environnement de développement.&lt;/span&gt;
composer require &lt;span class=&quot;re5&quot;&gt;--dev&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;paquet&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Ajout d&#039;un paquet en spécifiant sa version.&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# La version est gérée par les contraintes. Voir plus bas comment gérer les contraintes (lien externe).&lt;/span&gt;
composer require &lt;span class=&quot;re5&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;paquet&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;:&lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;contrainte&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;co0&quot;&gt;# Pour utiliser une branche de développement&lt;/span&gt;
composer require &lt;span class=&quot;re5&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;paquet&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;:dev-&lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;branch&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Mise à jour des bibliothèques&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Cette commande va mettre les bibliothèques à jour avec la dernière version disponible.
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# Pour faire une mise à jour complète&lt;/span&gt;
composer update
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Pour faire une mise à jour partielle&lt;/span&gt;
composer update &lt;span class=&quot;re5&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;paquet&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_tip plugin_wrap&quot;&gt;
&lt;p&gt;
Lors de la mise à jour d&amp;#039;une bibliothèque ayant des dépendances bloquantes, il faut lister également les dépendances. Par exemple :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;composer update &lt;span class=&quot;re5&quot;&gt;--&lt;/span&gt; friendsofsymfony&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;elastica-bundle ruflin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;elastica&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Installation des bibliothèques&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Cette commande va créer le fichier composer.lock s&amp;#039;il n&amp;#039;existe pas. Si le fichier composer.lock existe, les bibliothèques seront mise à jour avec la version spécifiée dans le dit fichier.
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# Pour faire une installation complète&lt;/span&gt;
composer &lt;span class=&quot;kw2&quot;&gt;install&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Pour faire une installation partielle&lt;/span&gt;
composer &lt;span class=&quot;kw2&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;re5&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;paquet&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Affichage des bibliothèques&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Cette commande affiche les informations détaillées des bibliothèques disponibles.
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# Affiche toutes les bibliothèques&lt;/span&gt;
composer show
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Affiche les bibliothèques installées&lt;/span&gt;
composer show &lt;span class=&quot;re5&quot;&gt;-i&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Affiche les extensions installées&lt;/span&gt;
composer show &lt;span class=&quot;re5&quot;&gt;-p&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Commandes utiles&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;commandes_utiles&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;244-2321&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit17&quot; id=&quot;installer_un_depot_composer_local&quot;&gt;Installer un dépôt Composer local&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Pour héberger et distribuer soi-même ses bibliothèques avec Composer, il est nécessaire de mettre en place un serveur. &lt;a href=&quot;https://github.com/composer/satis&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/composer/satis&quot; rel=&quot;ugc nofollow&quot;&gt;Satis&lt;/a&gt; permet de faire cela facilement.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Installer un d\u00e9p\u00f4t Composer local&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installer_un_depot_composer_local&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;2322-2570&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit18&quot; id=&quot;installer_satis&quot;&gt;Installer Satis&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Rien de plus simple. Pour cela, il suffit d&amp;#039;utiliser Composer.
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:19,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;composer create-project composer&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;satis &lt;span class=&quot;re5&quot;&gt;--stability&lt;/span&gt;=dev &lt;span class=&quot;re5&quot;&gt;--keep-vcs&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:20,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
Cette commande va créer un répertoire &lt;em&gt;satis&lt;/em&gt; qui contiendra le programme, la configuration du serveur ainsi que les bibliothèques.&lt;br/&gt;

Comme les bibliothèques seront distribuées par le serveur web, il est recommander d&amp;#039;exécuter la commande dans un répertoire accessible à l&amp;#039;utilisateur utilisé pour démarrer ce dernier.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Installer Satis&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installer_satis&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;2571-3101&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit21&quot; id=&quot;configurer_satis&quot;&gt;Configurer Satis&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
La configuration se fait dans un fichier JSON à la racine du répertoire d&amp;#039;installation. Son nom n&amp;#039;a pas d&amp;#039;importance. Par défaut, &lt;em&gt;satis.json&lt;/em&gt; sera utilisé.
&lt;/p&gt;

&lt;p&gt;
Voici la configuration de base :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:22,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code javascript&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Bibliothèque AINW&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;homepage&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;http://composer.ainw.org&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;repositories&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;git&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;url&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;ssh://git.ainw.org/AinwBundle&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;require&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;ainw/ainw-bundle&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;*&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;require-dependencies&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;false&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:23,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;name&lt;/em&gt; contient le nom du serveur qui sera affiché.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;homepage&lt;/em&gt; est l&amp;#039;&lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; à utiliser dans la configuration de Composer.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;repositories&lt;/em&gt; contient la liste des dépôts de bibliothèques.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;require&lt;/em&gt; contient la liste des bibliothèques à distribuer, ainsi que leur version. L&amp;#039;utilisation de &lt;em&gt;*&lt;/em&gt; permet de récupérer l&amp;#039;ensemble des versions disponibles.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;require-dependencies&lt;/em&gt; indique si les dépendances doivent être hébergées.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Il est possible d&amp;#039;utiliser Satis pour héberger localement des bibliothèques distribuées. Pour cela, il faut modifier le fichier de configuration précédent :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:24,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code javascript&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Bibliothèque AINW&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;homepage&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;http://composer.ainw.org&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;repositories&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;git&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;url&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;ssh://git.ainw.org/AinwBundle&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;composer&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;url&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;https://packagist.org&amp;quot;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;require&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;ainw/ainw-bundle&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;phpunit/phpunit&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;require-dependencies&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;archive&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;directory&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;archives&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:25,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;em&gt;archive&lt;/em&gt; indique que les bibliothèques sont archivées. Il est possible de choisir le type d&amp;#039;archive, l&amp;#039;&lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; de distribution des archives ainsi que le répertoire de stockage (voir &lt;a href=&quot;https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md#downloads&quot; class=&quot;urlextern&quot; title=&quot;https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md#downloads&quot; rel=&quot;ugc nofollow&quot;&gt;la documentation&lt;/a&gt;)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Configurer Satis&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;configurer_satis&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:21,&amp;quot;range&amp;quot;:&amp;quot;3102-5036&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit26&quot; id=&quot;generer_le_depot&quot;&gt;Générer le dépôt&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Il suffit de lancer la commande suivante :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:27,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;php bin&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;satis build &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;config.json&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; web&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:28,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
Comme le dépôt est statique, il faut le générer régulièrement pour récupérer les dernières versions des bibliothèques hébergées.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;G\u00e9n\u00e9rer le d\u00e9p\u00f4t&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;generer_le_depot&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:26,&amp;quot;range&amp;quot;:&amp;quot;5037-5335&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit29&quot; id=&quot;pour_aller_plus_loin&quot;&gt;Pour aller plus loin&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://github.com/composer/composer/issues/1795#issuecomment-17621692&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/composer/composer/issues/1795#issuecomment-17621692&quot; rel=&quot;ugc nofollow&quot;&gt;Configurer Satis avec SSH et Git&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://code.tutsplus.com/tutorials/setting-up-a-local-mirror-for-composer-packages-with-satis--net-36726&quot; class=&quot;urlextern&quot; title=&quot;http://code.tutsplus.com/tutorials/setting-up-a-local-mirror-for-composer-packages-with-satis--net-36726&quot; rel=&quot;ugc nofollow&quot;&gt;Installer un dépôt local avec Satis&lt;/a&gt;. Contient le code pour mettre à jour la configuration automatiquement si une bibliothèque n&amp;#039;est pas encore présente.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Pour aller plus loin&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pour_aller_plus_loin&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:29,&amp;quot;range&amp;quot;:&amp;quot;5336-5750&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit30&quot; id=&quot;declenchement_d_actions_externes&quot;&gt;Déclenchement d&amp;#039;actions externes&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Lors de l&amp;#039;utilisation de la commande &lt;code&gt;composer&lt;/code&gt;, il est possible de déclencher des actions extérieures en fonction de différents évènements. Il existe 4 types d&amp;#039;évènements &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; les évènements sur la commande elle même.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; les évènements sur l&amp;#039;installeur.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; les évènements sur les packages.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; les évènements sur les plugins.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Par exemple, on peut déclencher des actions après installation :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:31,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code javascript&quot;&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;scripts&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;st0&quot;&gt;&amp;quot;post-install-cmd&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
        &lt;span class=&quot;st0&quot;&gt;&amp;quot;ls -lh&amp;quot;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:32,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
Dans ce cas, le script se déclenchera à la fin de chaque commande d&amp;#039;installation. Il est aussi possible de déclencher uniquement le script avec la commande suivante :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:33,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;composer run-script post-install-cmd&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:34,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;D\u00e9clenchement d&amp;#039;actions externes&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;declenchement_d_actions_externes&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:30,&amp;quot;range&amp;quot;:&amp;quot;5751-6666&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit35&quot; id=&quot;liens_utiles&quot;&gt;Liens utiles&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://getcomposer.org/&quot; class=&quot;urlextern&quot; title=&quot;https://getcomposer.org/&quot; rel=&quot;ugc nofollow&quot;&gt;Site officiel&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://packagist.org/&quot; class=&quot;urlextern&quot; title=&quot;https://packagist.org/&quot; rel=&quot;ugc nofollow&quot;&gt;Archive principale de bibliothèques&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.dev-metal.com/install-update-composer-windows-7-ubuntu-debian-centos/&quot; class=&quot;urlextern&quot; title=&quot;http://www.dev-metal.com/install-update-composer-windows-7-ubuntu-debian-centos/&quot; rel=&quot;ugc nofollow&quot;&gt;How to install Composer (and update) on Windows 7 / 8 or Ubuntu / Debian&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md&quot; class=&quot;urlextern&quot; title=&quot;https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md&quot; rel=&quot;ugc nofollow&quot;&gt;Handling private packages with Satis or Toran Proxy&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://igor.io/2013/01/07/composer-versioning.html&quot; class=&quot;urlextern&quot; title=&quot;https://igor.io/2013/01/07/composer-versioning.html&quot; rel=&quot;ugc nofollow&quot;&gt;Understanding Composer version constraints&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Liens utiles&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;liens_utiles&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:12,&amp;quot;secid&amp;quot;:35,&amp;quot;range&amp;quot;:&amp;quot;6667-&amp;quot;} --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;&lt;a href=&quot;https://getcomposer.org/doc/articles/scripts.md#event-names&quot; class=&quot;urlextern&quot; title=&quot;https://getcomposer.org/doc/articles/scripts.md#event-names&quot; rel=&quot;ugc nofollow&quot;&gt;Nom des évènements&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>convertir_un_tableau_en_csv</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:convertir_un_tableau_en_csv&amp;rev=1735838913&amp;do=diff</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;convertir_un_tableau_en_csv&quot;&gt;Convertir un tableau en CSV&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Il n&amp;#039;y a pas de fonction pour faire ça directement. Mais il est quand même possible de le faire en combinant certains outils de PHP.
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Ouverture d&#039;un fichier mémoire en lecture/écriture ...&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$fp&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/fopen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fopen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;php://temp&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st_h&quot;&gt;&#039;r+&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// ... Écriture du tableau dans le fichier mémoire ...&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;+=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/fputcsv&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fputcsv&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$fp&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$input&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$delimiter&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$enclosure&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// ... Retour au début du fichier mémoire que l&#039;on vient d&#039;écrire ...&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/rewind&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;rewind&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$fp&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// ... Lecture du fichier mémoire dans une variable ...&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/fread&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fread&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$fp&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// ... Fermeture du fichier mémoire ...&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/fclose&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;fclose&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$fp&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>curiosites</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:curiosites&amp;rev=1735838913&amp;do=diff</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;curiosites&quot;&gt;Curiosités&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Curiosit\u00e9s&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;curiosites&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-26&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;quine&quot;&gt;Quine&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/readfile&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;readfile&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;__FILE__&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Quine&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;quine&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;27-113&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;boucle_for_sans_parametres&quot;&gt;Boucle &amp;quot;for&amp;quot; sans paramètres&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Cette boucle est une boucle infinie.
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
Elle est équivalente à cette autre boucle infinie :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Boucle \&amp;quot;for\&amp;quot; sans param\u00e8tres&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;boucle_for_sans_parametres&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;114-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>domdocument</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:domdocument&amp;rev=1735838913&amp;do=diff</link>
            <description>&lt;div class=&quot;tagstop&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;https://www.ainw.org/wiki/doku.php?id=tag:todo&amp;amp;do=showtag&amp;amp;tag=todo&quot; class=&quot;wikilink1&quot; title=&quot;tag:todo&quot; rel=&quot;tag&quot;&gt;todo&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_todo plugin_wrap&quot;&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://codingreflections.com/php-parse-html/&quot; class=&quot;urlextern&quot; title=&quot;https://codingreflections.com/php-parse-html/&quot; rel=&quot;ugc nofollow&quot;&gt;How to Parse HTML using PHP Native Classes&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://stackoverflow.com/questions/6051485/how-to-extract-html-comments-and-all-html-contained-by-node&quot; class=&quot;urlextern&quot; title=&quot;https://stackoverflow.com/questions/6051485/how-to-extract-html-comments-and-all-html-contained-by-node&quot; rel=&quot;ugc nofollow&quot;&gt;php - How to extract html comments and all html contained by node? - Stack Overflow&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.php.net/manual/en/book.dom.php&quot; class=&quot;urlextern&quot; title=&quot;https://www.php.net/manual/en/book.dom.php&quot; rel=&quot;ugc nofollow&quot;&gt;PHP: DOM - Manual&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.w3schools.com/xml/xpath_syntax.asp&quot; class=&quot;urlextern&quot; title=&quot;https://www.w3schools.com/xml/xpath_syntax.asp&quot; rel=&quot;ugc nofollow&quot;&gt;XPath Syntax&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>fonctions_meconnues</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:fonctions_meconnues&amp;rev=1735838913&amp;do=diff</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;fonctions_meconnues&quot;&gt;Fonctions méconnues&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.array-reduce.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.array-reduce.php&quot; rel=&quot;ugc nofollow&quot;&gt;array_reduce&lt;/a&gt; réduit un tableau en une valeur unique.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.checkdate&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.checkdate&quot; rel=&quot;ugc nofollow&quot;&gt;checkdate&lt;/a&gt; indique si la date saisie est une date valide.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.php.net/dirname&quot; class=&quot;urlextern&quot; title=&quot;https://www.php.net/dirname&quot; rel=&quot;ugc nofollow&quot;&gt;dirname&lt;/a&gt; retourne le répertoire parent. Le second paramètre indique le nombre de niveau à remonter. &lt;sup&gt;&lt;a href=&quot;#fn__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.escapeshellcmd.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.escapeshellcmd.php&quot; rel=&quot;ugc nofollow&quot;&gt;escapeshellcmd&lt;/a&gt; corrige une chaîne de caractère destinée à être utilisée avec &lt;a href=&quot;http://php.net/manual/en/function.exec.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.exec.php&quot; rel=&quot;ugc nofollow&quot;&gt;exec&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.eval.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.eval.php&quot; rel=&quot;ugc nofollow&quot;&gt;eval&lt;/a&gt; permet d&amp;#039;évaluer une chaîne de caractères comme du code PHP. ⚠ Il faut être conscient des problèmes de sécurités inhérents à cette fonction et de ne l&amp;#039;exécuter que sur une chaîne qui ne provient pas directement de l&amp;#039;utilisateur.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.get-defined-vars.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.get-defined-vars.php&quot; rel=&quot;ugc nofollow&quot;&gt;get_defined_vars&lt;/a&gt; affiche un tableau multi-dimension de l&amp;#039;ensemble des variables disponibles dans la portée de la fonction.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.highlight-string.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.highlight-string.php&quot; rel=&quot;ugc nofollow&quot;&gt;highlight_string&lt;/a&gt; affiche du code PHP colorisé dans une page.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.http-build-query.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.http-build-query.php&quot; rel=&quot;ugc nofollow&quot;&gt;http_build_query&lt;/a&gt; transforme un tableau associatif en une chaîne de paramètres à utiliser dans une &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.levenshtein.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.levenshtein.php&quot; rel=&quot;ugc nofollow&quot;&gt;levenshtein&lt;/a&gt; calcule la &lt;a href=&quot;https://fr.wikipedia.org/wiki/Distance_de_Levenshtein&quot; class=&quot;urlextern&quot; title=&quot;https://fr.wikipedia.org/wiki/Distance_de_Levenshtein&quot; rel=&quot;ugc nofollow&quot;&gt;distance de Levenshtein&lt;/a&gt; entre deux chaînes de caractères.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.pack.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.pack.php&quot; rel=&quot;ugc nofollow&quot;&gt;pack&lt;/a&gt; compacte des données dans une chaîne binaire.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.parse-url.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.parse-url.php&quot; rel=&quot;ugc nofollow&quot;&gt;parse_url&lt;/a&gt; extrait les informations contenues dans une &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.php-strip-whitespace.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.php-strip-whitespace.php&quot; rel=&quot;ugc nofollow&quot;&gt;php_strip_whitespace&lt;/a&gt; enlève l&amp;#039;ensemble des commentaires et des espaces en trop d&amp;#039;un fichier source.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.sscanf&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.sscanf&quot; rel=&quot;ugc nofollow&quot;&gt;sscanf&lt;/a&gt; permet de d&amp;#039;extraire des variables d&amp;#039;une chaîne de caractères en fonction d&amp;#039;un motif de chaîne.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.str-word-count.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.str-word-count.php&quot; rel=&quot;ugc nofollow&quot;&gt;str_word_count&lt;/a&gt; compte le nombre de mots dans une chaîne de caractères.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.unpack.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.unpack.php&quot; rel=&quot;ugc nofollow&quot;&gt;unpack&lt;/a&gt; décompacte des données depuis une chaîne binaire.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://php.net/manual/en/function.wordwrap.php&quot; class=&quot;urlextern&quot; title=&quot;http://php.net/manual/en/function.wordwrap.php&quot; rel=&quot;ugc nofollow&quot;&gt;wordwrap&lt;/a&gt; effectue la césure d&amp;#039;une chaîne de caractèrs.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
&lt;div class=&quot;content&quot;&gt;
&lt;a href=&quot;https://lehollandaisvolant.net/?id=20230302173804&quot; class=&quot;urlextern&quot; title=&quot;https://lehollandaisvolant.net/?id=20230302173804&quot; rel=&quot;ugc nofollow&quot;&gt;exakat, static analysis for PHP (@exakat): &amp;quot;#phptip #phptrick Avoid long list of /../../../ by leveraging… / Twitter - Le Hollandais Volant&lt;/a&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_info plugin_wrap&quot;&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Remplacer&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/dirname&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;dirname&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;__DIR__&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;../../../a/b/c&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Par&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/dirname&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;dirname&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;__DIR__&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;/a/b/c&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>pcre_et_utf-8</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:pcre_et_utf-8&amp;rev=1735838913&amp;do=diff</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;pcre_et_utf-8&quot;&gt;PCRE et UTF-8&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Il est possible de gérer des chaînes de caractères UTF-8 sans avoir besoin de recompiler PHP en activant le drapeau PCRE UTF-8. Pour faire cela, il suffit d&amp;#039;utiliser les options natives de la bibliothèque PCRE.
&lt;/p&gt;

&lt;p&gt;
En ajoutant le motif &lt;strong&gt;(*UTF8)&lt;/strong&gt; à l&amp;#039;expression rationnelle, &lt;strong&gt;preg_match&lt;/strong&gt; sera capable de trouver le caractère &lt;strong&gt;é&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
Pour plus d&amp;#039;information, voir &lt;a href=&quot;http://www.php.net/manual/en/function.preg-match.php#95828&quot; class=&quot;urlextern&quot; title=&quot;http://www.php.net/manual/en/function.preg-match.php#95828&quot; rel=&quot;ugc nofollow&quot;&gt;les commentaires de la fonction preg_match&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>php</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:php&amp;rev=1735838913&amp;do=diff</link>
            <description>&lt;div class=&quot;tagstop&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;https://www.ainw.org/wiki/doku.php?id=tag:todo&amp;amp;do=showtag&amp;amp;tag=todo&quot; class=&quot;wikilink1&quot; title=&quot;tag:todo&quot; rel=&quot;tag&quot;&gt;todo&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.ainw.org/wiki/lib/images/smileys/fixme.svg&quot; class=&quot;icon smiley&quot; alt=&quot;FIXME&quot; /&gt;
&lt;/p&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;php&quot;&gt;PHP&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php?rq=1&quot; class=&quot;urlextern&quot; title=&quot;https://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php?rq=1&quot; rel=&quot;ugc nofollow&quot;&gt;Liste&lt;/a&gt; pour la compréhension des opérateurs parce que c&amp;#039;est impossible de les rechercher dans un moteur, par exemple &lt;code&gt;…&lt;/code&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;PHP&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;php&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;21-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>ressources</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:ressources&amp;rev=1735838913&amp;do=diff</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;ressources&quot;&gt;Ressources&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Ressources&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;ressources&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-26&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;pour_ecrire_un_parser&quot;&gt;Pour écrire un parser&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.danielauener.com/howto-use-array_map-on-associative-arrays-to-change-values-and-keys/&quot; class=&quot;urlextern&quot; title=&quot;https://www.danielauener.com/howto-use-array_map-on-associative-arrays-to-change-values-and-keys/&quot; rel=&quot;ugc nofollow&quot;&gt;Howto use array_map on associative arrays to change values and keys - Daniel Auener&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://stillat.com/blog/2021/02/15/implementing-a-customer-dsl-parser-in-php&quot; class=&quot;urlextern&quot; title=&quot;https://stillat.com/blog/2021/02/15/implementing-a-customer-dsl-parser-in-php&quot; rel=&quot;ugc nofollow&quot;&gt;Implementing a Customer Domain Specific Language Parser in PHP - Stillat&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://tiarkrompf.github.io/notes/?%2Fjust-write-the-parser%2F=&quot; class=&quot;urlextern&quot; title=&quot;https://tiarkrompf.github.io/notes/?%2Fjust-write-the-parser%2F=&quot; rel=&quot;ugc nofollow&quot;&gt;Just write the #!%/* parser&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://prettydiff.com/2/guide/unrelated_parser.xhtml&quot; class=&quot;urlextern&quot; title=&quot;https://prettydiff.com/2/guide/unrelated_parser.xhtml&quot; rel=&quot;ugc nofollow&quot;&gt;Pretty Diff - Guide: How to write a parser&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://supunsetunga.medium.com/writing-a-parser-getting-started-44ba70bb6cc9&quot; class=&quot;urlextern&quot; title=&quot;https://supunsetunga.medium.com/writing-a-parser-getting-started-44ba70bb6cc9&quot; rel=&quot;ugc nofollow&quot;&gt;Writing a Parser — Part I: Getting Started | by Supun Setunga | Medium&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://www.toptal.com/scala/writing-an-interpreter&quot; class=&quot;urlextern&quot; title=&quot;https://www.toptal.com/scala/writing-an-interpreter&quot; rel=&quot;ugc nofollow&quot;&gt;Writing an Interpreter From Scratch | Toptal&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Pour \u00e9crire un parser&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;pour_ecrire_un_parser&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;27-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>symfony2</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:symfony2&amp;rev=1735838913&amp;do=diff</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;symfony_2&quot;&gt;Symfony 2&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.ainw.org/wiki/lib/exe/fetch.php?w=100&amp;amp;tok=3a04de&amp;amp;media=informatique:logo:symfony.png&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;100&quot; /&gt;
C&amp;#039;est un ensemble de composants PHP ainsi qu&amp;#039;un framework MVC libre écrit en PHP. Il fournit des fonctionnalités modulables et adaptables qui permettent de faciliter et d’accélérer le développement d&amp;#039;un site web.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Symfony 2&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;symfony_2&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-293&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;utilisation_des_parametres_de_configuration_dans_un_controleur&quot;&gt;Utilisation des paramètres de configuration dans un controleur&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Il est possible d&amp;#039;ajouter des paramètres de configuration et de les utiliser dans un controleur.&lt;br/&gt;

La première chose à faire est de créer les paramètres dans le(s) fichier(s) de configuration de la manière suivante :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code yaml&quot;&gt;&lt;span class=&quot;co4&quot;&gt;parameters&lt;/span&gt;:&lt;span class=&quot;co3&quot;&gt;
  my_config&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;: &lt;/span&gt;my_value&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
Attention, les paramètres ne supportent pas la syntaxe sur plusieurs niveaux des fichiers de traduction.
&lt;/p&gt;

&lt;p&gt;
Ensuite, dans le controleur, il suffit de récupérer la valeur du paramètre stockée dans le &lt;em&gt;container&lt;/em&gt;:
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;container&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getParameter&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;my_config&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Utilisation des param\u00e8tres de configuration dans un controleur&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;utilisation_des_parametres_de_configuration_dans_un_controleur&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;294-973&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;utilisation_des_parametres_de_configuration_dans_une_vue&quot;&gt;Utilisation des paramètres de configuration dans une vue&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Il est possible d&amp;#039;ajouter des paramètres de configuration et de les utiliser dans une vue.&lt;br/&gt;

La première chose à faire est de créer les paramètres dans le(s) fichier(s) de configuration de la manière suivante :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code yaml&quot;&gt;&lt;span class=&quot;co4&quot;&gt;parameters&lt;/span&gt;:&lt;span class=&quot;co3&quot;&gt;
  my_config&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;: &lt;/span&gt;my_value&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
Attention, les paramètres ne supportent pas la syntaxe sur plusieurs niveaux des fichiers de traduction.
&lt;/p&gt;

&lt;p&gt;
Ensuite, il faut créer des variables globales pour la vue (twig) dans le(s) fichier(s) de configuration de la manière suivante :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code yaml&quot;&gt;&lt;span class=&quot;co4&quot;&gt;twig&lt;/span&gt;:&lt;span class=&quot;co4&quot;&gt;
  globals&lt;/span&gt;:&lt;span class=&quot;co3&quot;&gt;
    my_config&lt;/span&gt;&lt;span class=&quot;sy2&quot;&gt;: &lt;/span&gt;my_value&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
Notez que dans cette section, les paramètres supportent la syntaxe sur plusieurs niveaux.
&lt;/p&gt;

&lt;p&gt;
Finalement, dans la vue, il suffit de récupérer la valeur de la variable globale :
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code twig&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;my_config&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
Pour plus d&amp;#039;information, voir &lt;a href=&quot;http://symfony.com/doc/current/cookbook/templating/global_variables.html&quot; class=&quot;urlextern&quot; title=&quot;http://symfony.com/doc/current/cookbook/templating/global_variables.html&quot; rel=&quot;ugc nofollow&quot;&gt;la documentation&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Utilisation des param\u00e8tres de configuration dans une vue&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;utilisation_des_parametres_de_configuration_dans_une_vue&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;974-2022&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit14&quot; id=&quot;recuperer_l_environnement_depuis_le_container&quot;&gt;Récupérer l&amp;#039;environnement depuis le container&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$container&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;getParameter&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st_h&quot;&gt;&#039;kernel.environment&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;R\u00e9cup\u00e9rer l&amp;#039;environnement depuis le container&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;recuperer_l_environnement_depuis_le_container&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;2023-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>twig</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:twig&amp;rev=1735838913&amp;do=diff</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;twig&quot;&gt;TWIG&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://www.ainw.org/wiki/lib/exe/fetch.php?w=100&amp;amp;tok=082ed6&amp;amp;media=informatique:logo:twig.png&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;100&quot; /&gt;
C&amp;#039;est un moteur de templates pour le langage de programmation PHP, utilisé par défaut par le framework Symfony. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;TWIG&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;twig&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-180&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;traduction&quot;&gt;Traduction&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; traduction d&amp;#039;une variable&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code twig&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;ma_variable&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/trans.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;trans&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; traduction d&amp;#039;une chaîne de caractères&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code twig&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;% &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/trans.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;trans&lt;/span&gt;&lt;/a&gt; %&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;ma_chaine&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;% &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/endtrans.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;endtrans&lt;/span&gt;&lt;/a&gt; %&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; traduction d&amp;#039;une chaîne de caractères contenant une variable&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code twig&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;% &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/trans.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;trans&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;re0&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;variable&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;ma_variable&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; %&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;ma_chaine variable&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;% &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/endtrans.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;endtrans&lt;/span&gt;&lt;/a&gt; %&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
Attention, la variable est transmise à la chaîne traduite et ne sera donc pas elle même traduite.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; traduction d&amp;#039;une chaîne de caractères variable&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code twig&quot;&gt;&lt;span class=&quot;sc1&quot;&gt;&lt;span class=&quot;coMULTI&quot;&gt;{# Méthode en passant par une variable #}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;% &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/set.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;set&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;re0&quot;&gt;ma_nouvelle_variable&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;ma_chaine&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;~&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;ma_variable&lt;/span&gt; %&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;ma_nouvelle_variable&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/trans.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;trans&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;sc1&quot;&gt;&lt;span class=&quot;coMULTI&quot;&gt;{# Méthode directe #}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;ma_chaine&amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;~&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;ma_variable&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;|&lt;/span&gt; &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/trans.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;trans&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
Attention, dans ce cas le contenu de la variable sera ajouté à la chaîne de caractères. C&amp;#039;est cette nouvelle chaîne de caractères qui sera traduite.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Traduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;traduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;181-1164&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;controle_des_espaces&quot;&gt;Contrôle des espaces&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Le contrôle des espaces permet de modifier le code généré en supprimant les espaces (espaces, tabulations, etc.) du code &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; généré. Il existe plusieurs syntaxes pour réaliser cela.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; suppression des espaces d&amp;#039;un bloc&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code twig&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;% &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/spaceless.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;spaceless&lt;/span&gt;&lt;/a&gt; %&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &amp;lt;div&amp;gt;
        &amp;lt;strong&amp;gt;foo bar&amp;lt;/strong&amp;gt;
    &amp;lt;/div&amp;gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;% &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/endspaceless.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;endspaceless&lt;/span&gt;&lt;/a&gt; %&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; suppression des espaces d&amp;#039;une balise TWIG&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code twig&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;% &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/set.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;set&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;re0&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;no spaces&#039;&lt;/span&gt; %&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;sc1&quot;&gt;&lt;span class=&quot;coMULTI&quot;&gt;{#- No leading/trailing whitespace -#}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;%&lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt; &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/if.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;re0&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;%&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;%&lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt; &lt;a href=&quot;http://twig.sensiolabs.org/doc/tags/endif.html&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;endif&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;%&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;sc1&quot;&gt;&lt;span class=&quot;coMULTI&quot;&gt;{# output &#039;no spaces&#039; #}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Contr\u00f4le des espaces&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;controle_des_espaces&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;1165-1791&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit16&quot; id=&quot;fonctions_utiles&quot;&gt;Fonctions utiles&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; affichage des informations d&amp;#039;une variable&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code twig&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;a href=&quot;http://twig.sensiolabs.org/doc/functions/dump.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;dump&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;ma_variable&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Fonctions utiles&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;fonctions_utiles&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;1792-1934&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit19&quot; id=&quot;liens_utiles&quot;&gt;Liens utiles&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://twig.sensiolabs.org/&quot; class=&quot;urlextern&quot; title=&quot;http://twig.sensiolabs.org/&quot; rel=&quot;ugc nofollow&quot;&gt;Site officiel&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://twig.sensiolabs.org/pdf/Twig.pdf&quot; class=&quot;urlextern&quot; title=&quot;http://twig.sensiolabs.org/pdf/Twig.pdf&quot; rel=&quot;ugc nofollow&quot;&gt;Documentation officielle en pdf&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Liens utiles&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;liens_utiles&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:19,&amp;quot;range&amp;quot;:&amp;quot;1935-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>utiliser_la_ligne_de_commande</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:utiliser_la_ligne_de_commande&amp;rev=1735838913&amp;do=diff</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;utiliser_la_ligne_de_commande&quot;&gt;Utiliser la ligne de commande&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co0&quot;&gt;# Afficher la version&lt;/span&gt;
php &lt;span class=&quot;re5&quot;&gt;-v&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Afficher la configuration&lt;/span&gt;
php &lt;span class=&quot;re5&quot;&gt;-i&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Afficher les modules compilés&lt;/span&gt;
php &lt;span class=&quot;re5&quot;&gt;-m&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Afficher les fichiers de configuration utilisés&lt;/span&gt;
php &lt;span class=&quot;re5&quot;&gt;--ini&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Vérifier la syntaxe d&#039;un fichier&lt;/span&gt;
php &lt;span class=&quot;re5&quot;&gt;-l&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;fichier&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co0&quot;&gt;# Lancer PHP en mode interactif&lt;/span&gt;
php &lt;span class=&quot;re5&quot;&gt;-a&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
        <item>
            <title>utiliser_le_client_soap_avec_un_certificat</title>
            <link>https://www.ainw.org/wiki/doku.php?id=informatique:langages:php:utiliser_le_client_soap_avec_un_certificat&amp;rev=1735838913&amp;do=diff</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;utiliser_le_client_soap_avec_un_certificat&quot;&gt;Utiliser le client SOAP avec un certificat&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Certains services web demandent de s&amp;#039;authentifier avec un certificat.
&lt;/p&gt;

&lt;p&gt;
En lisant la documentation, on se rend compte que le client SOAP accepte des options pour définir le certificat du client ainsi que son mot de passe. Malheureusement, je n&amp;#039;ai pas réussi à le faire fonctionner de cette manière.&lt;br/&gt;

Heureusement, il existe une autre façon de faire en injectant le certificat du client ainsi que son mot de passe directement dans la requête SSL.
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_prewrap plugin_wrap&quot;&gt;&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$wsdl&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;URL du fichier de description du service web&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Ici on configure les options de la requête SSL&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$context&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/stream_context_create&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;stream_context_create&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;ssl&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;local_cert&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;chemin d&#039;accès au certificat&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// uniquement au format PEM&lt;/span&gt;
        &lt;span class=&quot;st_h&quot;&gt;&#039;passphrase&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;lt;mot de passe du certificat&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Ici on configure les options du client SOAP&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$soap_options&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;
    &lt;span class=&quot;st_h&quot;&gt;&#039;stream_context&#039;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$context&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// injection des options de la requête SSL&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Ici on cré le client SOAP avec les options SOAP et SSL&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$soap_client&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; \SoapClient&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$wsdl&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$soap_options&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Thu, 02 Jan 2025 17:28:33 +0000</pubDate>
        </item>
    </channel>
</rss>
