Kort sagt: Att kompilera PHP betyder att ladda ner det officiella källpaketet från php.net, med ./configure fastställa önskade gränssnitt och tillägg, bygga med make, kontrollera med make test och sedan installera. Det ger full kontroll över version och omfattning. Priset: För varje säkerhetsuppdatering är ni själva ansvariga, som senast vid PHP2Shell, när man var tvungen att bygga om och starta om alla processer.
När egna PHP-byggen är rimliga
De flesta servrar får PHP från en paketkälla: från Linux-distributionen, ett tredjeparts-repository eller via en container-image. Det är för normal drift oftast det bästa valet, eftersom säkerhetsrättelser levereras automatiskt.
Egna byggen har ändå sin plats:
| Situation | Paketkälla | Eget bygge |
|---|---|---|
| Normal webbserver | oftast bättre | sällan nödvändigt |
| Version eller alternativ finns inte i pålitlig källa | inte tillgängligt | rimligt |
| Felsökning i PHP självt, debug-bygge | begränsat | rimligt |
| Minimal funktionsomfattning för speciella system | begränsat | rimligt |
| Säkerhetsuppdateringar | kommer med källan | egen uppgift |
Den som väljer egna byggen behöver en fast process för uppdateringar, annars blir fördelen en risk.
Förutsättningar
Enligt manualen behövs GNU make och en C-kompilator; sedan PHP 8.4 måste kompilatorn stödja C11. Den som bygger från Git-repositoryt i stället för från ett release-paket behöver dessutom autoconf (från 2.68), re2c (från 1.0.3 för PHP 8.3 och nyare) och bison (från 3.0.0). README i källkoden anger för Ubuntu den här starten:
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
För varje ytterligare tillägg tillkommer de passande utvecklingspaketen, till exempel för OpenSSL eller libsodium.
Hämta källkoden och kontrollera äktheten
Ett självbyggt PHP är bara så pålitligt som dess källkod. php.net erbjuder varje paket med SHA-256-kontrollsumma och GPG-signatur; release managers nycklar finns på nedladdningssidan och på sidan med GPG-nycklar.
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 # jämför med värdet på php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
Först när kontrollsumma och signatur stämmer går man vidare.
Kompilera PHP: configure, make, test
Förloppet har fyra steg:
- Konfigurera:
./configuremed önskade alternativ. Vid bygge från Git körs./buildconfförst. - Bygga:
make -j"$(nproc)"; antalet jobb motsvarar enligt README lämpligen antalet processorkärnor. - Testa:
make TEST_PHP_ARGS=-j4 testkör PHP:s testsvit. - Installera:
make install, beroende på målkatalog med root-rättigheter.
Ett exempel på ett PHP-FPM-bygge med egen målkatalog:
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
De viktigaste alternativen i överblick:
| Alternativ | Verkan |
|---|---|
--enable-fpm |
bygger PHP-FPM; dessutom --with-fpm-user, --with-fpm-group, --with-fpm-systemd |
--with-config-file-path |
katalog där PHP söker php.ini |
--with-openssl |
OpenSSL-stöd; sedan PHP 7.4 hittas sökvägen via pkg-config |
--with-sodium |
modern kryptografi med libsodium |
--disable-cgi |
avstår från CGI-varianten när den inte behövs |
--enable-debug |
debug-symboler, enligt README rekommenderat för utveckling, inte för produktion |
--enable-zts |
trådsäkerhet för driftlägen med trådar |
Med --prefix går det att installera flera självbyggda versioner sida vid sida, till exempel under /opt/php-8.3 och /opt/php-8.4. Det underlättar omställningar men kräver disciplin: Varje installerad version är egen programvara som måste byggas om vid varje säkerhetsrelease, även när ingen webbplats just då använder den. Byggen som inte längre behövs ska tas bort helt. Vilka alternativ ett befintligt bygge har visar php -i på raden ”Configure Command”; den är den bästa förlagan för nästa ombyggnad.
Observera om OPcache: Sedan PHP 8.5 är OPcache enligt en antagen RFC fast inkompilerat. I äldre versioner byggs det som tillägg och laddas via zend_extension. Vad tillägg och gränssnitt är förklarar Förstå PHP-tillägg och SAPI förklarat.
Egna byggen och säkerhet: skyldigheterna efter PHP2Shell
Självkompilerat PHP har en verklig säkerhetsfördel: Ni bygger bara det ni behöver. Varje tillägg som inte byggs och varje driftläge som inte byggs är kod som inte kan innehålla någon lucka. Ett bygge utan CGI, med få tillägg och tydliga sökvägar är överskådligt.
Mot det står en hård skyldighet. Distributioner levererade vid PHP2Shell delvis backports redan den 21 oktober 2026; den som bygger själv får ingenting automatiskt. Konkret betydde det:
- Ladda och kontrollera källkoden för den åtgärdade versionen.
- Bygg om med identiska alternativ;
php -ivisar den ursprungliga configure-raden. - Kör testerna och installera.
- Starta om alla PHP-processer, som beskrivet under Starta om PHP-FPM och alla workers.
- Kontrollera den körande versionen, som förklarat under Kontrollera PHP-version och patchläge rätt.
Ett självbyggt PHP dyker inte upp i någon pakethanterare. För ett register över vilka servrar som kör egna byggen i vilken version, annars förbises de vid nästa lucka.
Hur hjälper PHP SOS konkret?
Via PHP-patchtjänsten stöder vi driftansvariga för egna byggen:
- Registrera beståndet: Vi hittar självbyggda PHP-versioner och läser ut deras byggalternativ.
- Bygga om: Åtgärdad version med kontrollerad signatur, samma alternativ och fullständig testkörning.
- Rulla ut och starta om: Installation, omstart av alla processer, kontroll av den körande versionen.
- Förenkla: Där en underhållen paketkälla fyller samma syfte visar vi hur ni byter över.
Vanliga frågor
När lönar det sig att kompilera PHP själv?
När en nödvändig version eller ett nödvändigt alternativ inte finns i någon pålitlig paketkälla, för utveckling och felsökning i PHP självt eller för mycket slimmade, speciella byggen. För vanliga webbservrar är underhållna paket oftast det bättre valet.
Hur kontrollerar jag att PHP-källkoden är äkta?
php.net erbjuder för varje källpaket en SHA-256-kontrollsumma och en GPG-signatur. Jämför kontrollsumman och kontrollera signaturen med release managers nycklar som publiceras på php.net.
Måste jag kompilera om efter en säkerhetsrelease?
Ja. Ett självbyggt PHP får inga uppdateringar från distributionen. Efter PHP2Shell betydde det: bygga källkoden för 8.5.12, 8.4.27, 8.3.36 eller 8.2.35, installera och starta om alla PHP-processer.
Var hittar jag alla configure-alternativ?
Med ./configure --help i källkatalogen. Manualen nämner de viktigaste kärnalternativen, alternativ för tillägg står på deras manualsidor.