Kort sagt: At kompilere PHP betyder at hente den officielle kildepakke fra php.net, fastlægge de ønskede grænseflader og udvidelser med ./configure, bygge med make, kontrollere med make test og derefter installere. Det giver fuld kontrol over version og omfang. Prisen: For hver sikkerhedsopdatering er I selv ansvarlige, som senest ved PHP2Shell, hvor der skulle bygges på ny, og alle processer genstartes.
Hvornår egne PHP-builds er fornuftige
De fleste servere får PHP fra en pakkekilde: fra Linux-distributionen, et tredjeparts-repositorium eller via et container-image. Det er til normal drift som regel det bedste valg, fordi sikkerhedsrettelser leveres automatisk efterfølgende.
Egne builds har alligevel deres plads:
| Situation | Pakkekilde | Eget build |
|---|---|---|
| Normal webserver | oftest bedre | sjældent nødvendigt |
| Version eller indstilling ikke i pålidelig kilde | ikke tilgængelig | fornuftigt |
| Fejlfinding i PHP selv, debug-build | begrænset | fornuftigt |
| Minimalt funktionsomfang til specielle systemer | begrænset | fornuftigt |
| Sikkerhedsopdateringer | kommer med kilden | egen opgave |
Den, der vælger egne builds, har brug for en fast proces til opdateringer, ellers bliver fordelen til en risiko.
Forudsætninger
Ifølge manualen kræves GNU make og en C-compiler; siden PHP 8.4 skal compileren understøtte C11. Den, der bygger fra git-repositoriet i stedet for fra en udgivelsespakke, har desuden brug for autoconf (fra 2.68), re2c (fra 1.0.3 for PHP 8.3 og nyere) og bison (fra 3.0.0). README'en i kildekoden nævner til Ubuntu denne indgang:
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
Til hver ekstra udvidelse kommer de passende udviklingspakker, f.eks. til OpenSSL eller libsodium.
Hent kildekoden og kontrollér ægtheden
En selvbygget PHP er kun så pålidelig som sin kildekode. php.net tilbyder hver pakke med SHA-256-kontrolsum og GPG-signatur; release managers' nøgler står på download-siden og siden med GPG-nøglerne.
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 # sammenlign med værdien på php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
Først når kontrolsum og signatur stemmer, går det videre.
Kompilér PHP: configure, make, test
Forløbet har fire trin:
- Konfigurere:
./configuremed de ønskede indstillinger. Ved bygning fra git køres først./buildconf. - Bygge:
make -j"$(nproc)"; antallet af jobs svarer ifølge README fornuftigvis til antallet af processorkerner. - Teste:
make TEST_PHP_ARGS=-j4 testudfører PHP's testsuite. - Installere:
make install, alt efter målmappen med root-rettigheder.
Et eksempel på et PHP-FPM-build med egen målmappe:
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 vigtigste indstillinger i overblik:
| Indstilling | Virkning |
|---|---|
--enable-fpm |
bygger PHP-FPM; dertil --with-fpm-user, --with-fpm-group, --with-fpm-systemd |
--with-config-file-path |
mappe, hvor PHP søger php.ini |
--with-openssl |
OpenSSL-understøttelse; siden PHP 7.4 findes stien via pkg-config |
--with-sodium |
moderne kryptografi med libsodium |
--disable-cgi |
undlader CGI-varianten, hvis den ikke er nødvendig |
--enable-debug |
debug-symboler, ifølge README anbefalet til udvikling, ikke til produktion |
--enable-zts |
trådsikkerhed til driftsformer med tråde |
Med --prefix kan flere selvbyggede versioner installeres side om side, f.eks. under /opt/php-8.3 og /opt/php-8.4. Det letter omstillinger, men kræver disciplin: Hver installeret version er egen software, som skal bygges på ny ved hver sikkerhedsudgivelse, også selv om intet website lige nu bruger den. Builds, der ikke længere er brug for, bør fjernes fuldstændigt. Hvilke indstillinger et eksisterende build har, viser php -i i linjen »Configure Command«; den er den bedste skabelon til det næste nybyg.
Bemærkning om OPcache: Siden PHP 8.5 er OPcache ifølge den vedtagne RFC kompileret fast ind. Ved ældre versioner bygges det som udvidelse og indlæses via zend_extension. Hvad udvidelser og grænseflader er, forklarer Forstå PHP-udvidelser og SAPI forklaret.
Egne builds og sikkerhed: forpligtelserne efter PHP2Shell
Selvkompileret PHP har en reel sikkerhedsfordel: I bygger kun, hvad I har brug for. Hver udvidelse, der ikke bygges, og hver driftsform, der ikke bygges, er kode, der ikke kan rumme en sårbarhed. Et build uden CGI, med få udvidelser og klare stier er overskueligt.
Over for det står en hård forpligtelse. Distributioner har ved PHP2Shell til dels leveret backports den 21.10.2026; den, der bygger selv, får intet automatisk. Konkret betød det:
- Hent og kontrollér kildekoden til rettelsesversionen.
- Byg på ny med identiske indstillinger;
php -iviser den oprindelige configure-linje. - Kør tests og installér.
- Genstart alle PHP-processer, som beskrevet under Genstart PHP-FPM og alle workers.
- Kontrollér den kørende version, som forklaret under Kontrollér PHP-version og patch-status rigtigt.
En selvbygget PHP optræder ikke i nogen pakkehåndtering. Før en oversigt over, på hvilke servere egne builds kører i hvilken version, ellers overses de ved den næste sårbarhed.
Hvordan hjælper PHP SOS konkret?
Via PHP-patchservicen støtter vi driftsansvarlige for egne builds:
- Registrere beholdningen: Vi finder selvbyggede PHP-versioner og udlæser deres build-indstillinger.
- Bygge på ny: Rettelsesversion med kontrolleret signatur, samme indstillinger og fuld testkørsel.
- Udrulle og genstarte: Installation, genstart af alle processer, kontrol af den kørende version.
- Forenkle: Hvor en vedligeholdt pakkekilde opfylder det samme formål, viser vi overgangen.
Ofte stillede spørgsmål
Hvornår kan det betale sig at kompilere PHP selv?
Hvis en nødvendig version eller indstilling ikke er tilgængelig i nogen pålidelig pakkekilde, til udvikling og fejlfinding i PHP selv eller til meget slanke, specielle builds. Til normale webservere er vedligeholdte pakker som regel det bedre valg.
Hvordan kontrollerer jeg, at PHP-kildekoden er ægte?
php.net tilbyder til hver kildepakke en SHA-256-kontrolsum og en GPG-signatur. Sammenlign kontrolsummen og kontrollér signaturen med release managers' nøgler, der er offentliggjort på php.net.
Skal jeg kompilere på ny efter en sikkerhedsudgivelse?
Ja. En selvbygget PHP får ingen opdateringer fra distributionen. Efter PHP2Shell betød det: Byg kildekoden fra 8.5.12, 8.4.27, 8.3.36 eller 8.2.35, installér og genstart alle PHP-processer.
Hvor finder jeg alle configure-indstillinger?
Med ./configure --help i kildemappen. Manualen nævner de vigtigste kerneindstillinger, indstillinger til udvidelser står på deres manualsider.