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.
No utilice mod_php para nuevas
instalaciones. 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.
Para todos los despliegues modernos, use
PHP-FPM (FastCGI Process Manager)
con el módulo mod_proxy_fcgi 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 event de Apache httpd (el predeterminado desde
Apache httpd 2.4). Las principales distribuciones Linux lo incluyen como
configuración por defecto.
El método mod_php incrusta PHP directamente en cada
proceso worker de Apache httpd. A menos que PHP se compile con seguridad
de hilos (--enable-zts), mod_php
requiere el MPM prefork, lo que limita significativamente
la concurrencia. Si se procede con mod_php, se deben
comprender plenamente las implicaciones de rendimiento y seguridad.
La » Documentación Apache 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í.
La versión más reciente de Apache httpd puede obtenerse desde la » página de descarga de Apache, 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 » documentación Apache. Los números de versión se omiten aquí, para asegurarse de que las instrucciones no sean incorrectas. En los ejemplos a continuación, 'NN' deberá ser reemplazado por la versión específica de Apache httpd a utilizar.
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.
Nota:
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.
Descargue Apache httpd desde el sitio anterior y descomprímalo:
tar -xzf httpd-2.x.NN.tar.gz
De la misma manera, descargue y descomprima las fuentes de PHP:
tar -xzf php-NN.tar.gz
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 mod_php requiere el MPM
prefork a menos que PHP sea compilado con seguridad de
hilos (--enable-zts). Si tiene intención de usar PHP-FPM
(recomendado), puede usar el MPM event predeterminado y
pasar directamente a las
instrucciones de instalación de PHP-FPM.
cd httpd-2_x_NN ./configure --enable-so --with-mpm=prefork make make install
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:
/usr/local/apache2/bin/apachectl start
/usr/local/apache2/bin/apachectl stop
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 ./configure --help para obtener la lista de opciones disponibles. En nuestro ejemplo, realizaremos una configuración simple, con Apache httpd y soporte MySQL.
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 apxs, pero si se ha instalado Apache httpd de otra manera, se deberán tener en cuenta las especificidades y ajustar las rutas apxs en consecuencia. Tenga en cuenta que, según las distribuciones, podría ser necesario renombrar apxs a apxs2.
cd ../php-NN ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql make make install
Si se decide modificar las opciones de configuración después de la instalación, se deberán ejecutar nuevamente las etapas configure, make y make install. Entonces solo se necesitará reiniciar Apache para que el nuevo módulo surta efecto. Una recompilación de Apache httpd no es necesaria.
Tenga en cuenta que, salvo indicaciones contrarias, make install también instalará » PEAR, así como diversas herramientas PHP como phpize, PHP CLI y mucho más.
Configurar el archivo php.ini
cp php.ini-development /usr/local/lib/php.ini
Se debe editar el archivo .ini para definir las opciones PHP.
Si se prefiere colocar php.ini en otro directorio, utilice
la opción --with-config-file-path=/some/path en la etapa 5.
Si se elige el archivo php.ini-production, asegúrese de leer la lista de modificaciones correspondiente ya que puede afectar considerablemente la forma en que PHP funcionará.
Edite el archivo httpd.conf para cargar el módulo PHP. La ruta especificada
a la derecha de la cadena LoadModule, debe corresponder a la ruta del sistema del módulo
PHP. El comando make install anterior debería haber realizado esta operación
por usted, pero una simple verificación permitirá asegurarse.
LoadModule php_module modules/libphp.so
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
.php.
En lugar de utilizar solo la directiva AddType de Apache,
se desea evitar cualquier riesgo potencialmente peligroso, cuando
se descarga y crea un archivo como exploit.php.jpg,
de ejecución PHP. Utilizando este ejemplo, se puede tener cualquier
extensión analizada por PHP. Se ha añadido .php para el ejemplo.
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
O, si se desea permitir que los archivos .php, .php2,
.php3, .php4, .php5,
.php6, y .phtml sean
analizados por PHP, pero nada más, se utilizará esto:
<FilesMatch "\.(php[2-6]?|phtml)$">
SetHandler application/x-httpd-php
</FilesMatch>
Y para permitir que los archivos .phps 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:
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
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 FallbackResource.
Dado que la directiva SetHandler se aplica tanto si el archivo existe como
si no, y FallbackResource solo se aplica si aún no se ha definido un
manejador, puede ser necesario utilizar la directiva If para asegurarse de
que el manejador solo se aplique si el archivo existe.
Esto permite que FallbackResource gestione las rutas que terminan en
.php pero que no existen, lo que puede resultar útil para el manejo de
errores y el enrutamiento.
<FilesMatch "\.php$">
<If "-f %{REQUEST_FILENAME}">
SetHandler application/x-httpd-php
</If>
</FilesMatch>
FallbackResource /index.php
mod_rewrite puede ser utilizado para permitir que cualquier archivo .php
sea mostrado como código fuente con coloración sintáctica, sin necesidad de renombrarlo o copiarlo con una extensión .phps:
RewriteEngine On RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
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.
Utilice el procedimiento normal para iniciar el servidor Apache httpd, es decir:
/usr/local/apache2/bin/apachectl start
O
service httpd restart
Si se han seguido los pasos anteriores, ahora se tiene un servidor web
Apache httpd funcional con soporte PHP como módulo SAPI.
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
./configure --help en el árbol de fuentes correspondiente.
Nota: Compatibilidad MPM
A menos que PHP sea compilado con Zend Thread Safety (
--enable-zts),mod_phprequiere el MPMprefork. Para más información, leer la entrada FAQ correspondiente sobre el uso de Apache httpd con un MPM multi-hilo.La mayoría de los paquetes de distribución de
mod_phpno se compilan con ZTS, por lo quepreforksuele ser necesario. Si se necesita un MPM multi-hilo (recomendado para mejor rendimiento bajo carga), use PHP-FPM conmod_proxy_fcgien su lugar.
Nota:
La FAQ Apache MultiViews trata sobre el uso de MultiViews con PHP.