Situación actual: PHP2Shell. Dos vulnerabilidades críticas de PHP (CVSS 9.2) permiten ejecutar código malicioso sin autenticación. Parches desde el 21/10/2026.Qué hacer ahora →

Compilar PHP desde el código fuente

PHP se puede construir uno mismo con configure y make. Da control sobre extensiones y opciones, pero también toda la responsabilidad de cada actualización de seguridad.

Actualizado 6 min de lecturaConocimiento de PHP

En resumen: compilar PHP significa descargar el paquete oficial de código fuente de php.net, fijar con ./configure las interfaces y extensiones deseadas, construir con make, comprobar con make test y después instalar. Esto da control total sobre la versión y el alcance. El precio: usted es responsable de cada actualización de seguridad, como ocurrió hace poco con PHP2Shell, cuando hubo que reconstruir y reiniciar todos los procesos.

Cuándo tienen sentido los builds propios de PHP

La mayoría de los servidores obtienen PHP de una fuente de paquetes: de la distribución de Linux, de un repositorio de terceros o mediante una imagen de contenedor. Para el funcionamiento normal suele ser la mejor opción, porque las correcciones de seguridad se suministran de forma automática.

Los builds propios tienen, aun así, su lugar:

Situación Fuente de paquetes Build propio
Servidor web normal suele ser mejor rara vez necesario
Versión u opción no disponible en una fuente de confianza no disponible con sentido
Depuración del propio PHP, build de depuración limitado con sentido
Alcance funcional mínimo para sistemas especiales limitado con sentido
Actualizaciones de seguridad llegan con la fuente tarea propia

Quien opta por builds propios necesita un proceso fijo de actualizaciones; de lo contrario, la ventaja se convierte en riesgo.

Requisitos

Según el manual se necesitan GNU make y un compilador de C; desde PHP 8.4, el compilador debe admitir C11. Quien construye desde el repositorio de Git en lugar de un paquete de versión necesita además autoconf (desde 2.68), re2c (desde 1.0.3 para PHP 8.3 y posteriores) y bison (desde 3.0.0). El README del código fuente indica para Ubuntu esta entrada:

sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev

Para cada extensión adicional se suman los paquetes de desarrollo correspondientes, por ejemplo para OpenSSL o libsodium.

Descargar el código fuente y comprobar su autenticidad

Un PHP compilado por uno mismo es tan fiable como su código fuente. php.net ofrece cada paquete con suma de verificación SHA-256 y firma GPG; las claves de los release managers figuran en la página de descargas y en la página de claves GPG.

curl -O https://www.php.net/distributions/php-8.4.27.tar.xz
curl -O https://www.php.net/distributions/php-8.4.27.tar.xz.asc
sha256sum php-8.4.27.tar.xz                     # comparar con el valor de php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz

Solo cuando la suma de verificación y la firma coinciden se continúa.

Compilar PHP: configure, make, test

El proceso tiene cuatro pasos:

  1. Configurar: ./configure con las opciones deseadas. Si se construye desde Git, ejecutar antes ./buildconf.
  2. Construir: make -j"$(nproc)"; según el README, lo razonable es que el número de trabajos coincida con el de núcleos del procesador.
  3. Probar: make TEST_PHP_ARGS=-j4 test ejecuta el conjunto de pruebas de PHP.
  4. Instalar: make install, según el directorio de destino con derechos de root.

Un ejemplo de build de PHP-FPM con directorio de destino propio:

tar xf php-8.4.27.tar.xz && cd php-8.4.27
./configure --prefix=/opt/php-8.4 \
  --with-config-file-path=/opt/php-8.4/etc \
  --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-fpm-systemd \
  --with-openssl --with-sodium \
  --disable-cgi
make -j"$(nproc)"
make TEST_PHP_ARGS=-j4 test
sudo make install
/opt/php-8.4/bin/php -v

Las opciones más importantes de un vistazo:

Opción Efecto
--enable-fpm construye PHP-FPM; además --with-fpm-user, --with-fpm-group, --with-fpm-systemd
--with-config-file-path directorio donde PHP busca el php.ini
--with-openssl compatibilidad con OpenSSL; desde PHP 7.4 la ruta se encuentra mediante pkg-config
--with-sodium criptografía moderna con libsodium
--disable-cgi prescinde de la variante CGI si no se necesita
--enable-debug símbolos de depuración; según el README, recomendado para desarrollo, no para producción
--enable-zts seguridad de hilos para modos de funcionamiento con hilos

Con --prefix se pueden instalar en paralelo varias versiones compiladas por uno mismo, por ejemplo en /opt/php-8.3 y /opt/php-8.4. Esto facilita los cambios, pero exige disciplina: cada versión instalada es un software propio que debe reconstruirse con cada versión de seguridad, aunque en ese momento ningún sitio web la utilice. Los builds que ya no se necesitan deben eliminarse por completo. Qué opciones tiene un build existente lo muestra php -i en la línea «Configure Command»; es la mejor plantilla para la siguiente reconstrucción.

Nota sobre OPcache: desde PHP 8.5, OPcache está compilado de forma permanente según el RFC aprobado. En versiones anteriores se construye como extensión y se carga mediante zend_extension. Qué son las extensiones y las interfaces lo explican Entender las extensiones de PHP y SAPI explicada.

Builds propios y seguridad: las obligaciones tras PHP2Shell

El PHP compilado por uno mismo tiene una ventaja real de seguridad: usted construye solo lo que necesita. Cada extensión no construida y cada modo de funcionamiento no construido es código que no puede contener una vulnerabilidad. Un build sin CGI, con pocas extensiones y rutas claras es fácil de abarcar.

A ello se opone una obligación estricta. En PHP2Shell, las distribuciones entregaron backports en parte el 21/10/2026; quien construye por sí mismo no recibe nada automáticamente. En concreto significó:

  1. Descargar y comprobar el código fuente de la versión corregida.
  2. Reconstruir con opciones idénticas; php -i muestra la línea de configure original.
  3. Ejecutar las pruebas e instalar.
  4. Reiniciar todos los procesos de PHP, como se describe en Reiniciar PHP-FPM y todos los workers.
  5. Comprobar la versión en ejecución, como se explica en Comprobar correctamente la versión de PHP y el estado del parche.
Importante

Un PHP compilado por uno mismo no aparece en ningún gestor de paquetes. Mantenga un inventario de en qué servidores se ejecutan builds propios y en qué versión; de lo contrario, se pasarán por alto en la próxima vulnerabilidad.

¿Cómo ayuda PHP SOS en concreto?

A través del servicio de parches de PHP apoyamos a los operadores de builds propios:

  • Registrar el parque: encontramos las versiones de PHP compiladas por uno mismo y leemos sus opciones de build.
  • Reconstruir: versión corregida con firma comprobada, las mismas opciones y ejecución completa de las pruebas.
  • Desplegar y reiniciar: instalación, reinicio de todos los procesos y control de la versión en ejecución.
  • Simplificar: donde una fuente de paquetes mantenida cumple el mismo fin, mostramos cómo pasar a ella.

Preguntas frecuentes

¿Cuándo compensa compilar PHP uno mismo?

Cuando una versión u opción necesaria no está disponible en ninguna fuente de paquetes de confianza, para el desarrollo y la depuración del propio PHP o para builds muy ligeros y especiales. Para servidores web normales, los paquetes mantenidos suelen ser la mejor opción.

¿Cómo compruebo que el código fuente de PHP es auténtico?

php.net ofrece para cada paquete de código fuente una suma de verificación SHA-256 y una firma GPG. Compare la suma de verificación y compruebe la firma con las claves de los release managers publicadas en php.net.

¿Debo volver a compilar tras una versión de seguridad?

Sí. Un PHP compilado por uno mismo no recibe actualizaciones de la distribución. Tras PHP2Shell significó: construir el código fuente de 8.5.12, 8.4.27, 8.3.36 o 8.2.35, instalarlo y reiniciar todos los procesos de PHP.

¿Dónde encuentro todas las opciones de configure?

Con ./configure --help en el directorio del código fuente. El manual menciona las opciones principales del núcleo; las opciones de las extensiones figuran en sus páginas del manual.

Fuentes

Contacto inmediato

Cada hora cuenta. Escríbanos ahora.

Describa brevemente el sistema, la versión de PHP y lo que ha observado. Nos pondremos en contacto, aclararemos la situación y trabajaremos en remoto hasta que el incidente quede cerrado y documentado.

Ayuda inmediata