Em resumo: Compilar o PHP significa descarregar o pacote de código-fonte oficial do php.net, definir com ./configure as interfaces e extensões pretendidas, construir com make, verificar com make test e depois instalar. Isso dá controlo total sobre a versão e o âmbito. O preço: por cada atualização de segurança é você o responsável, como ainda recentemente no PHP2Shell, quando foi preciso construir de novo e reiniciar todos os processos.
Quando fazem sentido builds próprios do PHP
A maioria dos servidores obtém o PHP de uma fonte de pacotes: da distribuição Linux, de um repositório de terceiros ou de uma imagem de contentor. Para a operação normal, é geralmente a melhor escolha, porque as correções de segurança chegam automaticamente.
Os builds próprios têm, ainda assim, o seu lugar:
| Situação | Fonte de pacotes | Build próprio |
|---|---|---|
| Servidor web normal | geralmente melhor | raramente necessário |
| Versão ou opção ausente de uma fonte de confiança | não disponível | sensato |
| Deteção de falhas no próprio PHP, build de depuração | limitado | sensato |
| Âmbito de funções mínimo para sistemas especiais | limitado | sensato |
| Atualizações de segurança | chegam com a fonte | tarefa própria |
Quem opta por builds próprios precisa de um processo fixo para as atualizações, caso contrário a vantagem torna-se um risco.
Requisitos
Segundo o manual, são necessários o GNU make e um compilador C; desde o PHP 8.4, o compilador tem de suportar C11. Quem constrói a partir do repositório Git, em vez de um pacote de versão, precisa ainda do autoconf (a partir da 2.68), do re2c (a partir da 1.0.3 para o PHP 8.3 e posteriores) e do bison (a partir da 3.0.0). O README do código-fonte indica, para o Ubuntu, este ponto de partida:
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
Para cada extensão adicional, acrescem os pacotes de desenvolvimento correspondentes, por exemplo para o OpenSSL ou a libsodium.
Descarregar o código-fonte e verificar a autenticidade
Um PHP construído por si é tão fiável quanto o seu código-fonte. O php.net oferece cada pacote com soma de verificação SHA-256 e assinatura GPG; as chaves dos release managers estão na página de downloads e na página das chaves 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 com o valor no php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
Só quando a soma de verificação e a assinatura coincidem se avança.
Compilar o PHP: configure, make, test
O processo tem quatro passos:
- Configurar:
./configurecom as opções pretendidas. Ao construir a partir do Git, executar antes./buildconf. - Construir:
make -j"$(nproc)"; o número de jobs corresponde, segundo o README, de forma sensata ao número de núcleos do processador. - Testar:
make TEST_PHP_ARGS=-j4 testexecuta a suite de testes do PHP. - Instalar:
make install, consoante o diretório de destino com direitos de root.
Um exemplo de um build PHP-FPM com diretório de destino próprio:
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
As opções mais importantes em resumo:
| Opção | Efeito |
|---|---|
--enable-fpm |
constrói o PHP-FPM; adicionalmente --with-fpm-user, --with-fpm-group, --with-fpm-systemd |
--with-config-file-path |
diretório em que o PHP procura o php.ini |
--with-openssl |
suporte para OpenSSL; desde o PHP 7.4, o caminho é encontrado através do pkg-config |
--with-sodium |
criptografia moderna com a libsodium |
--disable-cgi |
dispensa a variante CGI, se não for necessária |
--enable-debug |
símbolos de depuração, segundo o README recomendados para desenvolvimento, não para produção |
--enable-zts |
segurança de threads para modos de operação com threads |
Com --prefix podem instalar-se lado a lado várias versões construídas por si, por exemplo em /opt/php-8.3 e /opt/php-8.4. Isso facilita as mudanças, mas exige disciplina: cada versão instalada é software próprio, que tem de ser reconstruído a cada versão de segurança, mesmo que nenhum site a use naquele momento. Os builds que já não são necessários devem ser totalmente removidos. As opções que um build existente tem mostra-as o php -i na linha «Configure Command»; é o melhor modelo para a próxima reconstrução.
Nota sobre o OPcache: desde o PHP 8.5, o OPcache está, segundo o RFC aprovado, compilado de forma fixa. Nas versões mais antigas, é construído como extensão e carregado com zend_extension. O que são extensões e interfaces explicam-no Compreender as extensões PHP e SAPI explicada.
Builds próprios e segurança: os deveres após o PHP2Shell
O PHP compilado por si tem uma verdadeira vantagem de segurança: constrói apenas o que precisa. Cada extensão não construída e cada modo de operação não construído é código que não pode conter uma vulnerabilidade. Um build sem CGI, com poucas extensões e caminhos claros é fácil de ter em vista.
Contrapõe-se um dever pesado. No PHP2Shell, as distribuições entregaram backports em parte a 21/10/2026; quem constrói por si não recebe nada automaticamente. Concretamente, isso significou:
- Descarregar e verificar o código-fonte da versão corrigida.
- Reconstruir com opções idênticas; o
php -imostra a linha original do configure. - Executar os testes e instalar.
- Reiniciar todos os processos PHP, como descrito em Reiniciar o PHP-FPM e todos os workers.
- Verificar a versão em execução, como explicado em Verificar corretamente a versão do PHP e o nível de patches.
Um PHP construído por si não aparece em nenhum gestor de pacotes. Mantenha um inventário de em que servidores correm builds próprios e em que versão, caso contrário serão ignorados na próxima vulnerabilidade.
Como ajuda concretamente o PHP SOS?
Através do serviço de patches PHP, apoiamos os operadores de builds próprios:
- Registar o parque instalado: encontramos versões do PHP construídas por si e lemos as suas opções de build.
- Reconstruir: versão corrigida com assinatura verificada, as mesmas opções e execução completa dos testes.
- Distribuir e reiniciar: instalação, reinício de todos os processos, verificação da versão em execução.
- Simplificar: onde uma fonte de pacotes mantida cumpre o mesmo propósito, mostramos a mudança.
Perguntas frequentes
Quando compensa compilar o PHP por conta própria?
Quando uma versão ou opção necessária não está disponível em nenhuma fonte de pacotes de confiança, para desenvolvimento e deteção de falhas no próprio PHP, ou para builds muito enxutos e especiais. Para servidores web normais, os pacotes mantidos são geralmente a melhor escolha.
Como verifico que o código-fonte do PHP é autêntico?
O php.net oferece, para cada pacote de código-fonte, uma soma de verificação SHA-256 e uma assinatura GPG. Compare a soma de verificação e verifique a assinatura com as chaves dos release managers publicadas no php.net.
Tenho de compilar de novo após uma versão de segurança?
Sim. Um PHP construído por si não recebe atualizações da distribuição. Depois do PHP2Shell, isso significou: compilar o código-fonte do 8.5.12, 8.4.27, 8.3.36 ou 8.2.35, instalar e reiniciar todos os processos PHP.
Onde encontro todas as opções do configure?
Com ./configure --help no diretório do código-fonte. O manual indica as opções principais mais importantes; as opções das extensões constam das respetivas páginas do manual.