<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/install.unix.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'install.unix.apache2.php',
    1 => 'Apache httpd 2.x sur les syst&egrave;mes Unix',
    2 => 'Apache httpd 2.x sur les syst&egrave;mes Unix',
  ),
  'up' => 
  array (
    0 => 'install.unix.php',
    1 => 'Installation sur les syst&egrave;mes Unix',
  ),
  'prev' => 
  array (
    0 => 'install.unix.commandline.php',
    1 => 'CGI et configuration en ligne de commande',
  ),
  'next' => 
  array (
    0 => 'install.unix.nginx.php',
    1 => 'Nginx 1.4.x sur les syst&egrave;mes Unix',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'install/unix/apache2.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="install.unix.apache2" class="sect1">
 <h2 class="title">Apache httpd 2.x sur les systèmes Unix</h2>

 <p class="simpara">
  Cette section contient les notes et conseils d&#039;installation de PHP avec le serveur
  HTTP Apache 2.x sur les systèmes Linux et de type Unix.
 </p>

 <div class="warning"><strong class="warning">Avertissement</strong>
  <h1 class="title">Utiliser PHP-FPM à la place</h1>
  <p class="simpara">
   <strong>Ne pas utiliser <code class="literal">mod_php</code> pour les nouvelles
   installations.</strong> Les instructions de cette page sont conservées
   à titre de référence historique et pour les rares cas où l&#039;intégration de PHP
   directement dans le processus Apache httpd est spécifiquement requise.
  </p>
  <p class="simpara">
   Pour tous les déploiements modernes, utiliser
   <a href="install.fpm.php" class="link">PHP-FPM</a> (FastCGI Process Manager)
   avec le module <code class="literal">mod_proxy_fcgi</code> d&#039;Apache httpd. PHP-FPM
   offre une meilleure gestion des ressources, l&#039;isolation des processus, le redémarrage
   indépendant de PHP sans redémarrer Apache httpd, et la compatibilité avec le MPM
   <code class="literal">event</code> d&#039;Apache httpd (le MPM par défaut depuis Apache httpd 2.4).
   Les principales distributions Linux utilisent cette configuration par défaut.
  </p>
  <p class="simpara">
   L&#039;approche <code class="literal">mod_php</code> intègre PHP directement dans chaque processus
   worker d&#039;Apache httpd. Sauf si PHP est compilé avec la sécurité des threads
   (<code class="literal">--enable-zts</code>), <code class="literal">mod_php</code> requiert
   le MPM <code class="literal">prefork</code>, ce qui limite significativement la
   simultanéité. L&#039;utilisation de <code class="literal">mod_php</code> implique
   de bien comprendre les implications en termes de performances et de sécurité.
  </p>
 </div>

 <p class="simpara">
  La <a href="http://httpd.apache.org/docs/current/" class="link external">&raquo;&nbsp;Documentation Apache</a>
  est la meilleure source d&#039;informations sur le serveur Apache httpd 2.x.
  La plupart des informations sur les options d&#039;installation d&#039;Apache httpd
  peut y être trouvée.
 </p>

 <p class="simpara">
  La version la plus récente d&#039;Apache httpd peut être obtenue
  depuis la <a href="http://httpd.apache.org/" class="link external">&raquo;&nbsp;page de téléchargement d&#039;Apache</a>,
  et une version adaptée de PHP depuis les liens ci-dessus.
  Ce guide couvre uniquement les bases de fonctionnement d&#039;Apache httpd 2.x avec PHP.
  Pour plus d&#039;informations, lire la
  <a href="http://httpd.apache.org/docs/current/" class="link external">&raquo;&nbsp;documentation Apache</a>.
  Les numéros de version sont omis ici, pour s&#039;assurer que les instructions ne soient
  pas incorrectes. Dans les exemples ci-dessous, &#039;NN&#039; devra être remplacé
  par la version spécifique d&#039;Apache httpd à utiliser.
 </p>

 <p class="simpara">
  Ces instructions s&#039;appliquent à Apache httpd 2.4, qui est la seule branche
  de version supportée d&#039;Apache httpd. Les versions antérieures (2.2 et inférieures)
  sont en fin de vie et ne doivent pas être utilisées.
 </p>

 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <p class="simpara">
   À partir de PHP 8.4.0, la SAPI apache2handler nécessite au minimum
   Apache 2.4 ; la prise en charge d&#039;Apache 2.0 et 2.2, en fin de vie, a été
   retirée.
  </p>
 </p></blockquote>

 <ol type="1">
  <li class="listitem">
   <p class="simpara">
    Télécharger Apache httpd depuis le site ci-dessus et le décompresser :
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
tar -xzf httpd-2.x.NN.tar.gz
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="simpara">
    De la même façon, télécharger et décompresser les sources de PHP :
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
tar -xzf php-NN.tar.gz
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="simpara">
    Compiler et installer Apache httpd. Consulter la documentation sur l&#039;installation
    d&#039;Apache httpd pour plus de détails. Il est à noter que <code class="literal">mod_php</code>
    requiert le MPM <code class="literal">prefork</code>, sauf si PHP a été compilé
    avec la sécurité des threads (<code class="literal">--enable-zts</code>). Pour
    utiliser PHP-FPM à la place (recommandé), il est possible d&#039;utiliser le MPM
    <code class="literal">event</code> par défaut et passer directement aux
    <a href="install.fpm.php" class="link">instructions d&#039;installation de PHP-FPM</a>.
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
cd httpd-2_x_NN
./configure --enable-so --with-mpm=prefork
make
make install
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    Maintenant qu&#039;Apache httpd 2.x.NN est disponible sous /usr/local/apache2,
    configuré avec le support du chargement de modules et le MPM prefork.
    Pour tester l&#039;installation, utiliser la procédure normale pour démarrer
    le serveur Apache httpd, c.-à-d. :

    <div class="informalexample">
     <div class="example-contents screen">
<div class="cdata"><pre>
/usr/local/apache2/bin/apachectl start
</pre></div>
     </div>
    </div>

    et l&#039;arrêter pour continuer la configuration de PHP :

    <div class="informalexample">
     <div class="example-contents screen">
<div class="cdata"><pre>
/usr/local/apache2/bin/apachectl stop
</pre></div>
     </div>
    </div>
   </p>
  </li>

  <li class="listitem">
   <p class="simpara">
    Maintenant, configurer et compiler PHP. Ce sera à ce moment-là
    où il est possible de personnaliser PHP avec les diverses options disponibles,
    comme la liste des extensions à activer. Exécuter
    <strong class="command">./configure --help</strong> pour la liste des options disponibles. Dans notre exemple, nous effectuerons
    une configuration simple, avec Apache httpd et le support MySQL.
   </p>

   <p class="simpara">
    Si Apache httpd a été construit depuis les sources, tel que décrit ci-dessus,
    l&#039;exemple suivant devrait être correct concernant les chemins vers <strong class="command">apxs</strong>, mais si
    Apache httpd a été installé d&#039;une autre façon, il faut prendre en compte les
    spécificités et ajuster les chemins <strong class="command">apxs</strong> en conséquence. Il est à noter que suivant
    les distributions, il peut être nécessaire de renommer <strong class="command">apxs</strong> en <strong class="command">apxs2</strong>.
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
cd ../php-NN
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
make
make install
</pre></div>
    </div>
   </div>

   <p class="simpara">
    En cas de modification des options de configuration après l&#039;installation,
    il faut exécuter de nouveau les étapes <strong class="command">configure</strong>, <strong class="command">make</strong>
    et <strong class="command">make install</strong>.
    Il suffit alors de redémarrer Apache pour que le nouveau module prenne effet.
    Une re-compilation d&#039;Apache httpd n&#039;est pas nécessaire.
   </p>

   <p class="para">
    Il est à noter que, sauf indications contraires, l&#039;étape <strong class="command">make install</strong>
    installera également <a href="https://pear.php.net/" class="link external">&raquo;&nbsp;PEAR</a>,
    divers outils PHP comme <a href="install.pecl.phpize.php" class="link">phpize</a>,
    PHP CLI et bien plus encore.
   </p>
  </li>

  <li class="listitem">
   <p class="simpara">
    Configurer le fichier <var class="filename">php.ini</var>.
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
cp php.ini-development /usr/local/lib/php.ini
</pre></div>
    </div>
   </div>

   <p class="simpara">
    Il faut éditer le fichier <code class="literal">.ini</code> pour définir les options PHP.
    Pour placer ce fichier dans un autre répertoire, utiliser
    l&#039;option <code class="literal">--with-config-file-path=/some/path</code> à l&#039;étape 5.
   </p>

   <p class="simpara">
    En cas d&#039;utilisation du fichier <var class="filename">php.ini-production</var>, il faut s&#039;assurer
    de lire la liste des modifications correspondante car il peut affecter considérablement
    la façon dont PHP fonctionnera.
   </p>
  </li>

  <li class="listitem">
   <p class="simpara">
    Éditer le fichier <var class="filename">httpd.conf</var> pour charger le module PHP. Le chemin spécifié
    à droite de l&#039;instruction <code class="literal">LoadModule</code> doit correspondre au chemin système
    du module PHP. L&#039;étape <strong class="command">make install</strong> ci-dessus devrait avoir réalisé
    cette opération automatiquement, mais une simple vérification permettra de s&#039;en assurer.
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">LoadModule php_module modules/libphp.so</pre>
</div>
    </div>

   </div>
  </li>

  <li class="listitem">
   <p class="simpara">
    Configurer Apache httpd pour analyser certaines extensions comme étant des scripts PHP.
    Par exemple, laisser Apache httpd passer à PHP les fichiers dont l&#039;extension est
    <code class="literal">.php</code>.
    Au lieu d&#039;utiliser seulement la directive <code class="literal">AddType</code>,
    nous souhaitons éviter tout risque potentiellement dangereux lors
    d&#039;un téléchargement et de la création de fichiers comme <var class="filename">exploit.php.jpg</var>,
    d&#039;être exécutés par PHP. En utilisant cet exemple, il est possible d&#039;avoir n&#039;importe
    quelle extension analysée par PHP, simplement en les ajoutant. Nous avons ajouté
    <code class="literal">.php</code> pour l&#039;exemple.
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">&lt;FilesMatch \.php$&gt;
    SetHandler application/x-httpd-php
&lt;/FilesMatch&gt;</pre>
</div>
    </div>

   </div>

   <p class="para">
    Ou, pour autoriser les fichiers <code class="literal">.php</code>, <code class="literal">.php2</code>,
    <code class="literal">.php3</code>, <code class="literal">.php4</code>, <code class="literal">.php5</code>,
    <code class="literal">.php6</code>, et <code class="literal">.phtml</code> à être
    analysés par PHP, mais rien d&#039;autre, nous utiliserons ceci :
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">&lt;FilesMatch &quot;\.(php[2-6]?|phtml)$&quot;&gt;
    SetHandler application/x-httpd-php
&lt;/FilesMatch&gt;</pre>
</div>
    </div>

   </div>

   <p class="para">
    Et pour autoriser les fichiers <code class="literal">.phps</code> à être gérés par le filtre du code
    source de PHP, et ainsi être affichés comme code source avec la coloration
    syntaxique, utiliser ceci :
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">&lt;FilesMatch &quot;\.phps$&quot;&gt;
    SetHandler application/x-httpd-php-source
&lt;/FilesMatch&gt;</pre>
</div>
    </div>

   </div>

   <p class="simpara">
    Pour permettre l&#039;utilisation d&#039;un fichier PHP comme gestionnaire par défaut lorsqu&#039;aucun
    autre gestionnaire n&#039;est trouvé, par exemple lors de l&#039;utilisation d&#039;un moteur de routage,
    la directive <code class="literal">FallbackResource</code> peut être utilisée.
   </p>

   <p class="simpara">
    Comme la directive <code class="literal">SetHandler</code> est appliquée que le fichier existe ou non, et que
    <code class="literal">FallbackResource</code> n&#039;est appliquée que si aucun gestionnaire n&#039;a déjà été défini,
    il peut être nécessaire d&#039;utiliser la directive <code class="literal">If</code> pour s&#039;assurer que le gestionnaire
    n&#039;est appliqué que si le fichier existe.
    Cela permet à <code class="literal">FallbackResource</code> de gérer les chemins se terminant par <code class="literal">.php</code>
    mais qui n&#039;existent pas, ce qui peut être utile pour la gestion des erreurs et le routage.
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">&lt;FilesMatch &quot;\.php$&quot;&gt;
    &lt;If &quot;-f %{REQUEST_FILENAME}&quot;&gt;
        SetHandler application/x-httpd-php
    &lt;/If&gt;
&lt;/FilesMatch&gt;
FallbackResource /index.php</pre>
</div>
    </div>

   </div>

   <p class="para">
    <code class="literal">mod_rewrite</code> peut être utilisé pour permettre à n&#039;importe quel fichier <code class="literal">.php</code>
    d&#039;être affiché comme code source avec coloration syntaxique, sans pour autant
    avoir besoin de le renommer ou de le copier avec une extension <code class="literal">.phps</code> :
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="apache-confcode"><pre class="apache-confcode">RewriteEngine On
RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]</pre>
</div>
    </div>

   </div>

   <p class="simpara">
    Le filtre de code source PHP ne devrait pas être actif sur des systèmes de
    production, car il peut exposer du code confidentiel ou des informations
    sensibles contenues dans le code source.
   </p>
  </li>

  <li class="listitem">
   <p class="simpara">
    Utiliser la procédure normale pour démarrer Apache httpd, c.-à-d. :
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
/usr/local/apache2/bin/apachectl start
</pre></div>
    </div>
   </div>

   <p class="para">Ou</p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
service httpd restart
</pre></div>
    </div>
   </div>

  </li>
 </ol>

 <p class="simpara">
  En ayant suivi les étapes précédentes, le serveur web Apache httpd est maintenant
  fonctionnel avec le support PHP comme module <code class="literal">SAPI</code>.
  Il y a une multitude d&#039;autres options de configuration disponibles
  avec Apache httpd et PHP. Pour plus d&#039;informations, entrer la commande
  <strong class="command">./configure --help</strong> dans l&#039;arbre source correspondant.
 </p>

 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <strong>Compatibilité MPM</strong><br />
  <p class="simpara">
   Sauf si PHP a été compilé avec la sécurité des threads Zend
   (<code class="literal">--enable-zts</code>), <code class="literal">mod_php</code> requiert
   le MPM <code class="literal">prefork</code>.
   Pour savoir pourquoi, lire l&#039;entrée de la FAQ correspondante sur l&#039;utilisation
   d&#039;<a href="faq.installation.php#faq.installation.apache2" class="link">Apache httpd avec un MPM
   threadé</a>.
  </p>

  <p class="simpara">
   La plupart des paquets de distribution de
   <code class="literal">mod_php</code> ne sont pas compilés avec ZTS, donc
   <code class="literal">prefork</code> est généralement requis. Si vous avez besoin d&#039;un
   MPM threadé (recommandé pour de meilleures performances sous charge), utiliser
   <a href="install.fpm.php" class="link">PHP-FPM</a> avec
   <code class="literal">mod_proxy_fcgi</code> à la place.
  </p>
 </p></blockquote>

 <blockquote class="note"><p><strong class="note">Note</strong>: 
  <p class="simpara">
   La <a href="faq.installation.php#faq.installation.apache.multiviews" class="link">FAQ Apache
   MultiViews</a> traite de l&#039;utilisation MultiViews avec PHP.
  </p>
 </p></blockquote>
</div><?php manual_footer($setup); ?>