<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'install.unix.apache2.php',
    1 => 'Apache httpd 2.x en sistemas Unix',
    2 => 'Apache httpd 2.x en sistemas Unix',
  ),
  'up' => 
  array (
    0 => 'install.unix.php',
    1 => 'Instalaci&oacute;n en sistemas Unix',
  ),
  'prev' => 
  array (
    0 => 'install.unix.commandline.php',
    1 => 'CGI y configuraciones de l&iacute;nea de comandos',
  ),
  'next' => 
  array (
    0 => 'install.unix.nginx.php',
    1 => 'Nginx 1.4.x en sistemas Unix',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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 en sistemas Unix</h2>
 <p class="simpara">
  Esta sección contiene las notas y consejos de instalación de PHP con el servidor
  Apache HTTP Server 2.x en sistemas Linux y similares a Unix.
 </p>

 <div class="warning"><strong class="warning">Advertencia</strong>
  <h1 class="title">Usar PHP-FPM en su lugar</h1>
  <p class="simpara">
   <strong>No utilice <code class="literal">mod_php</code> para nuevas
   instalaciones.</strong> Las instrucciones de esta página se mantienen
   como referencia histórica y para los casos excepcionales en que se requiere
   incrustar PHP directamente en el proceso de Apache httpd.
  </p>
  <p class="simpara">
   Para todos los despliegues modernos, use
   <a href="install.fpm.php" class="link">PHP-FPM</a> (FastCGI Process Manager)
   con el módulo <code class="literal">mod_proxy_fcgi</code> de Apache httpd. PHP-FPM
   ofrece una mejor gestión de recursos, aislamiento de procesos, reinicio
   independiente de PHP sin reiniciar Apache httpd, y compatibilidad con el
   MPM <code class="literal">event</code> de Apache httpd (el predeterminado desde
   Apache httpd 2.4). Las principales distribuciones Linux lo incluyen como
   configuración por defecto.
  </p>
  <p class="simpara">
   El método <code class="literal">mod_php</code> incrusta PHP directamente en cada
   proceso worker de Apache httpd. A menos que PHP se compile con seguridad
   de hilos (<code class="literal">--enable-zts</code>), <code class="literal">mod_php</code>
   requiere el MPM <code class="literal">prefork</code>, lo que limita significativamente
   la concurrencia. Si se procede con <code class="literal">mod_php</code>, se deben
   comprender plenamente las implicaciones de rendimiento y seguridad.
  </p>
 </div>

 <p class="simpara">
  La <a href="http://httpd.apache.org/docs/current/" class="link external">&raquo;&nbsp;Documentación Apache</a>
  es la mejor fuente de información sobre el servidor Apache httpd 2.x.
  La mayoría de la información sobre las opciones de instalación de Apache httpd
  puede encontrarse allí.
 </p>

 <p class="simpara">
  La versión más reciente de Apache httpd puede obtenerse
  desde la <a href="http://httpd.apache.org/" class="link external">&raquo;&nbsp;página de descarga de Apache</a>,
  y una versión adaptada de PHP desde los enlaces anteriores.
  Esta guía cubre únicamente las bases de funcionamiento de Apache httpd 2.x con PHP.
  Para más información, leer la
  <a href="http://httpd.apache.org/docs/current/" class="link external">&raquo;&nbsp;documentación Apache</a>.
  Los números de versión se omiten aquí, para asegurarse de que las instrucciones no sean
  incorrectas. En los ejemplos a continuación, &#039;NN&#039; deberá ser reemplazado
  por la versión específica de Apache httpd a utilizar.
 </p>

 <p class="simpara">
  Estas instrucciones se aplican a Apache httpd 2.4, que es la única rama de
  versión compatible de Apache httpd. Las versiones anteriores (2.2 y anteriores)
  están en fin de vida y no deben utilizarse.
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <p class="simpara">
   A partir de PHP 8.4.0, la SAPI apache2handler requiere al menos Apache 2.4;
   el soporte de Apache 2.0 y 2.2, que están en fin de vida, ha sido eliminado.
  </p>
 </p></blockquote>

 <ol type="1">
  <li class="listitem">
   <p class="simpara">
    Descargue Apache httpd desde el sitio anterior y descomprímalo:
   </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 misma manera, descargue y descomprima las fuentes 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">
    Compile e instale Apache httpd. Consulte la documentación sobre la instalación
    de Apache httpd para más detalles sobre la compilación de este software.
    Tenga en cuenta que <code class="literal">mod_php</code> requiere el MPM
    <code class="literal">prefork</code> a menos que PHP sea compilado con seguridad de
    hilos (<code class="literal">--enable-zts</code>). Si tiene intención de usar PHP-FPM
    (recomendado), puede usar el MPM <code class="literal">event</code> predeterminado y
    pasar directamente a las
    <a href="install.fpm.php" class="link">instrucciones de instalación 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">
    Ahora que se tiene Apache httpd 2.x.NN disponible bajo /usr/local/apache2,
    configurado con soporte para la carga de módulos y el MPM prefork.
    Para probar la instalación, utilice el procedimiento
    normal para iniciar el servidor Apache httpd, es decir:

    <div class="informalexample">
     <div class="example-contents screen">
<div class="cdata"><pre>
/usr/local/apache2/bin/apachectl start
</pre></div>
     </div>
    </div>
    y deténgalo para continuar con la configuración 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">
    Ahora, configure y compile PHP. Será en este momento
    cuando se podrá personalizar PHP con las diversas opciones disponibles,
    como la lista de extensiones a activar. Ejecute
    <strong class="command">./configure --help</strong> para obtener la lista de opciones disponibles. En nuestro ejemplo, realizaremos
    una configuración simple, con Apache httpd y soporte MySQL.
   </p>

   <p class="simpara">
    Si se ha construido Apache httpd desde las fuentes, tal como se describe anteriormente,
    el siguiente ejemplo debería ser correcto en cuanto a las rutas hacia <strong class="command">apxs</strong>, pero si
    se ha instalado Apache httpd de otra manera, se deberán tener en cuenta las especificidades y ajustar las rutas <strong class="command">apxs</strong> en consecuencia. Tenga en cuenta que, según las distribuciones, podría ser necesario renombrar <strong class="command">apxs</strong> a <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">
    Si se decide modificar las opciones de configuración después de la instalación,
    se deberán ejecutar nuevamente las etapas <strong class="command">configure</strong>, <strong class="command">make</strong>
    y <strong class="command">make install</strong>.
    Entonces solo se necesitará reiniciar Apache para que el nuevo módulo surta efecto.
    Una recompilación de Apache httpd no es necesaria.
   </p>

   <p class="para">
    Tenga en cuenta que, salvo indicaciones contrarias, <strong class="command">make install</strong> también instalará
    <a href="https://pear.php.net/" class="link external">&raquo;&nbsp;PEAR</a>, así como diversas herramientas PHP como
    <a href="install.pecl.phpize.php" class="link">phpize</a>, PHP CLI y
    mucho más.
   </p>

  </li>

  <li class="listitem">
   <p class="simpara">
    Configurar el archivo <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">
    Se debe editar el archivo <code class="literal">.ini</code> para definir las opciones PHP.
    Si se prefiere colocar <var class="filename">php.ini</var> en otro directorio, utilice
    la opción <code class="literal">--with-config-file-path=/some/path</code> en la etapa 5.
   </p>

   <p class="simpara">
    Si se elige el archivo <var class="filename">php.ini-production</var>, asegúrese de leer la lista
    de modificaciones correspondiente ya que puede afectar considerablemente la forma
    en que PHP funcionará.
   </p>

  </li>

  <li class="listitem">

   <p class="simpara">
    Edite el archivo <var class="filename">httpd.conf</var> para cargar el módulo PHP. La ruta especificada
    a la derecha de la cadena <code class="literal">LoadModule</code>, debe corresponder a la ruta del sistema del módulo
    PHP. El comando <strong class="command">make install</strong> anterior debería haber realizado esta operación
    por usted, pero una simple verificación permitirá asegurarse.
   </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">
    Indique a Apache httpd que analice ciertas extensiones como scripts PHP.
    Por ejemplo, deje que Apache httpd pase a PHP los archivos cuya extensión es
    <code class="literal">.php</code>.
    En lugar de utilizar solo la directiva <code class="literal">AddType</code> de Apache,
    se desea evitar cualquier riesgo potencialmente peligroso, cuando
    se descarga y crea un archivo como <var class="filename">exploit.php.jpg</var>,
    de ejecución PHP. Utilizando este ejemplo, se puede tener cualquier
    extensión analizada por PHP. Se ha añadido <code class="literal">.php</code> para el ejemplo.
   </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="simpara">
    O, si se desea permitir que los archivos <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>, y <code class="literal">.phtml</code> sean
    analizados por PHP, pero nada más, se utilizará esto:
   </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">
    Y para permitir que los archivos <code class="literal">.phps</code> sean manejados por el filtro del código
    fuente de PHP, y así, ser mostrados como código fuente con coloración
    sintáctica, utilice esto:
   </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">
    Para permitir el uso de un archivo PHP como manejador por defecto cuando no se
    encuentra ningún otro manejador, por ejemplo al utilizar un motor de enrutamiento, se
    puede usar la directiva <code class="literal">FallbackResource</code>.
   </p>

   <p class="simpara">
    Dado que la directiva <code class="literal">SetHandler</code> se aplica tanto si el archivo existe como
    si no, y <code class="literal">FallbackResource</code> solo se aplica si aún no se ha definido un
    manejador, puede ser necesario utilizar la directiva <code class="literal">If</code> para asegurarse de
    que el manejador solo se aplique si el archivo existe.
    Esto permite que <code class="literal">FallbackResource</code> gestione las rutas que terminan en
    <code class="literal">.php</code> pero que no existen, lo que puede resultar útil para el manejo de
    errores y el enrutamiento.
   </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> puede ser utilizado para permitir que cualquier archivo <code class="literal">.php</code>
    sea mostrado como código fuente con coloración sintáctica, sin necesidad de renombrarlo o copiarlo con una extensión <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="para">
    El filtro de código fuente PHP no debería estar activo en sistemas de
    producción, ya que puede exponer código confidencial o información
    sensible contenida en el código fuente.
   </p>

  </li>

  <li class="listitem">
   <p class="simpara">
    Utilice el procedimiento normal para iniciar el servidor Apache httpd, es decir:
   </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">O</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">
  Si se han seguido los pasos anteriores, ahora se tiene un servidor web
  Apache httpd funcional con soporte PHP como módulo <code class="literal">SAPI</code>.
  Por supuesto, hay una multitud de otras opciones de configuración disponibles
  con Apache httpd y PHP. Para más información, introduzca el comando
  <strong class="command">./configure --help</strong> en el árbol de fuentes correspondiente.
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <strong>Compatibilidad MPM</strong><br />
  <p class="simpara">
   A menos que PHP sea compilado con Zend Thread Safety
   (<code class="literal">--enable-zts</code>), <code class="literal">mod_php</code> requiere
   el MPM <code class="literal">prefork</code>.
   Para más información, leer la entrada FAQ correspondiente sobre el uso de
   <a href="faq.installation.php#faq.installation.apache2" class="link">Apache httpd con un MPM
   multi-hilo</a>.
  </p>

  <p class="simpara">
   La mayoría de los paquetes de distribución de
   <code class="literal">mod_php</code> no se compilan con ZTS, por lo que
   <code class="literal">prefork</code> suele ser necesario. Si se necesita un MPM
   multi-hilo (recomendado para mejor rendimiento bajo carga), use
   <a href="install.fpm.php" class="link">PHP-FPM</a> con
   <code class="literal">mod_proxy_fcgi</code> en su lugar.
  </p>
 </p></blockquote>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <p class="simpara">
   La <a href="faq.installation.php#faq.installation.apache.multiviews" class="link">FAQ Apache
   MultiViews</a> trata sobre el uso de MultiViews con PHP.
  </p>
 </p></blockquote>
</div><?php manual_footer($setup); ?>