# Kompilér PHP fra kildekoden

> Kompilér PHP fra kildekoden: forudsætninger, configure-indstillinger, kontrol af signaturen, tests og hvorfor egne builds giver egne patch-forpligtelser.

Kilde: https://phpsos.de/da/php/php-kompilieren/  
Status: 25.10.2026  
Udbyder: PHP SOS, PHP-nødhjælp og serversikkerhed. Akut hjælp på WhatsApp: https://wa.me/491736494914?text=Hej%20PHP%20SOS%2C%20vi%20har%20brug%20for%20hj%C3%A6lp%20med%20vores%20PHP-server.%20Firma%3A%20%E2%80%A6%20Website%3A%20%E2%80%A6

**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:

```bash
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.

```bash
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:

1. **Konfigurere:** `./configure` med de ønskede indstillinger. Ved bygning fra git køres først `./buildconf`.
2. **Bygge:** `make -j"$(nproc)"`; antallet af jobs svarer ifølge README fornuftigvis til antallet af processorkerner.
3. **Teste:** `make TEST_PHP_ARGS=-j4 test` udfører PHP's testsuite.
4. **Installere:** `make install`, alt efter målmappen med root-rettigheder.

Et eksempel på et PHP-FPM-build med egen målmappe:

```bash
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](https://phpsos.de/da/php/php-erweiterungen/) og [SAPI forklaret](https://phpsos.de/da/php/sapi-erklaert/).

## 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:

1. Hent og kontrollér kildekoden til rettelsesversionen.
2. Byg på ny med identiske indstillinger; `php -i` viser den oprindelige configure-linje.
3. Kør tests og installér.
4. Genstart alle PHP-processer, som beskrevet under [Genstart PHP-FPM og alle workers](https://phpsos.de/da/php2shell/php-fpm-neustart/).
5. Kontrollér den kørende version, som forklaret under [Kontrollér PHP-version og patch-status rigtigt](https://phpsos.de/da/php2shell/php-version-pruefen/).

> **Vigtigt:**
> 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](https://phpsos.de/da/leistungen/php-patch-service/) 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.

## Kilder

- [PHP-manualen: Installation fra kildekoden](https://www.php.net/manual/en/install.unix.source.php)
- [PHP-manualen: configure-indstillinger](https://www.php.net/manual/en/configure.about.php)
- [PHP-manualen: Installér FPM](https://www.php.net/manual/en/install.fpm.install.php)
- [php.net: Kildepakker med kontrolsummer og signaturer](https://www.php.net/downloads.php)
