# PHP kompileerimine lähtekoodist

> PHP kompileerimine lähtekoodist: eeldused, configure-valikud, allkirja kontroll, testid ning miks oma ehitused tähendavad oma paikamiskohustusi.

Allikas: https://phpsos.de/et/php/php-kompilieren/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**Lühidalt:** PHP kompileerimine tähendab ametliku lähtekoodipaketi allalaadimist php.net-ist, soovitud liideste ja laiendite määramist käsuga `./configure`, ehitamist käsuga `make`, kontrollimist käsuga `make test` ja seejärel paigaldamist. See annab täieliku kontrolli versiooni ja mahu üle. Hind: iga turvauuenduse eest vastutate ise, nagu viimati PHP2Shelli puhul, mil tuli uuesti ehitada ja kõik protsessid uuesti käivitada.

## Millal on oma PHP ehitused mõistlikud

Enamik servereid saab PHP paketiallikast: Linuxi distributsioonist, kolmanda osapoole hoidlast või konteinerikujutise kaudu. See on tavatööks enamasti parim valik, sest turvaparandused tarnitakse automaatselt.

Oma ehitustel on siiski oma koht:

| Olukord | Paketiallikas | Oma ehitus |
|---|---|---|
| Tavaline veebiserver | enamasti parem | harva vajalik |
| Versioon või valik ei ole usaldusväärses allikas | ei ole saadaval | mõistlik |
| Veaotsing PHP enda juures, debug-ehitus | piiratud | mõistlik |
| Minimaalne funktsioonide maht erisüsteemidele | piiratud | mõistlik |
| Turvauuendused | tulevad allikaga | oma ülesanne |

Kes otsustab oma ehituste kasuks, vajab uuenduste jaoks kindlat protsessi, muidu muutub eelis riskiks.

## Eeldused

Käsiraamatu järgi on vaja GNU make'i ja C-kompilaatorit; alates PHP 8.4-st peab kompilaator toetama C11. Kes ehitab Git-hoidlast, mitte väljalaskepaketist, vajab lisaks autoconf'i (alates 2.68), re2c'd (alates 1.0.3 PHP 8.3 ja uuema jaoks) ja bison'i (alates 3.0.0). Lähtekoodi README nimetab Ubuntu jaoks selle sissejuhatuse:

```bash
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
```

Iga täiendava laiendi jaoks lisanduvad sobivad arenduspaketid, näiteks OpenSSL-i või libsodiumi jaoks.

## Lähtekoodi allalaadimine ja ehtsuse kontroll

Ise ehitatud PHP on nii usaldusväärne kui selle lähtekood. php.net pakub iga paketti SHA-256 kontrollsumma ja GPG allkirjaga; release-managerite võtmed on allalaadimislehel ja GPG-võtmete lehel.

```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                     # võrrelda php.net-is oleva väärtusega
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
```

Alles siis, kui kontrollsumma ja allkiri klapivad, minnakse edasi.

## PHP kompileerimine: configure, make, test

Kulg koosneb neljast sammust:

1. **Seadistamine:** `./configure` soovitud valikutega. Git-ist ehitamisel enne käivitada `./buildconf`.
2. **Ehitamine:** `make -j"$(nproc)"`; tööde arv vastab README järgi mõistlikult protsessorituumade arvule.
3. **Testimine:** `make TEST_PHP_ARGS=-j4 test` käivitab PHP testikomplekti.
4. **Paigaldamine:** `make install`, olenevalt sihtkataloogist root-õigustega.

Näide PHP-FPM ehituse kohta oma sihtkataloogiga:

```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
```

Olulisemad valikud ülevaatlikult:

| Valik | Mõju |
|---|---|
| `--enable-fpm` | ehitab PHP-FPM-i; lisaks `--with-fpm-user`, `--with-fpm-group`, `--with-fpm-systemd` |
| `--with-config-file-path` | kataloog, kust PHP otsib php.ini |
| `--with-openssl` | OpenSSL-i tugi; alates PHP 7.4-st leitakse tee pkg-config'i kaudu |
| `--with-sodium` | kaasaegne krüptograafia libsodiumiga |
| `--disable-cgi` | jätab CGI variandi ehitamata, kui seda ei vajata |
| `--enable-debug` | silumissümbolid, README järgi soovitatav arenduseks, mitte tootmiseks |
| `--enable-zts` | lõimeohutus lõimedega töörežiimide jaoks |

Valikuga `--prefix` saab mitu ise ehitatud versiooni kõrvuti paigaldada, näiteks kataloogidesse `/opt/php-8.3` ja `/opt/php-8.4`. See lihtsustab ümberlülitusi, kuid nõuab distsipliini: iga paigaldatud versioon on oma tarkvara, mis tuleb igal turvaväljalaskel uuesti ehitada, isegi kui ükski veebisait seda parajasti ei kasuta. Enam mittevajalikud ehitused tuleb täielikult eemaldada. Milliseid valikuid olemasolev ehitus kasutab, näitab `php -i` real „Configure Command“; see on parim mall järgmiseks uuesti ehitamiseks.

Märkus OPcache'i kohta: alates PHP 8.5-st on OPcache vastu võetud RFC järgi kindlalt sisse kompileeritud. Vanemate versioonide puhul ehitatakse see laiendusena ja laaditakse käsuga `zend_extension`. Mis on laiendused ja liidesed, selgitavad [PHP laiendite mõistmine](https://phpsos.de/et/php/php-erweiterungen/) ja [SAPI selgitus](https://phpsos.de/et/php/sapi-erklaert/).

## Oma ehitused ja turvalisus: kohustused pärast PHP2Shelli

Ise kompileeritud PHP-l on tõeline turvaeelis: ehitate ainult seda, mida vajate. Iga ehitamata laiendus ja iga ehitamata töörežiim on kood, mis ei saa turvaauku sisaldada. Ehitus ilma CGI-ta, vähese arvu laiendite ja selgete teedega on ülevaatlik.

Sellele vastandub range kohustus. Distributsioonid tarnisid PHP2Shelli backport'e osaliselt 21.10.2026; kes ehitab ise, ei saa midagi automaatselt. Konkreetselt tähendas see:

1. Laadida parandatud versiooni lähtekood ja kontrollida see.
2. Ehitada uuesti identsete valikutega; `php -i` näitab algset configure-rida.
3. Käivitada testid ja paigaldada.
4. Käivitada kõik PHP protsessid uuesti, nagu on kirjeldatud lehel [PHP-FPM-i ja kõigi workerite taaskäivitamine](https://phpsos.de/et/php2shell/php-fpm-neustart/).
5. Kontrollida töötavat versiooni, nagu on selgitatud lehel [PHP versiooni ja paigaseisu õige kontrollimine](https://phpsos.de/et/php2shell/php-version-pruefen/).

> **Oluline:**
> Ise ehitatud PHP ei ilmu üheski paketihalduris. Pidage inventari, millistes serverites töötavad oma ehitused millises versioonis, muidu jäävad need järgmise turvaaugu korral märkamata.

## Kuidas PHP SOS konkreetselt aitab?

[PHP paikamisteenuse](https://phpsos.de/et/leistungen/php-patch-service/) kaudu toetame oma ehituste haldajaid:

- **Olemasoleva kaardistamine:** Leiame ise ehitatud PHP versioonid ja loeme välja nende ehitusvalikud.
- **Uuesti ehitamine:** Parandatud versioon kontrollitud allkirja, samade valikute ja täieliku testijooksuga.
- **Väljaveeretamine ja taaskäivitus:** Paigaldus, kõigi protsesside taaskäivitus, töötava versiooni kontroll.
- **Lihtsustamine:** Kus hooldatud paketiallikas täidab sama eesmärki, näitame ülemineku.


## Korduma kippuvad küsimused

**Millal tasub PHP-d ise kompileerida?**  
Kui vajalik versioon või valik ei ole ühegi usaldusväärse paketiallika kaudu saadaval, PHP enda arenduseks ja veaotsinguks või väga kitsaste, eriliste ehituste jaoks. Tavaliste veebiserverite jaoks on hooldatud paketid enamasti parem valik.

**Kuidas ma kontrollin, et PHP lähtekood on ehtne?**  
php.net pakub iga lähtekoodipaketi juurde SHA-256 kontrollsumma ja GPG allkirja. Võrrelge kontrollsummat ja kontrollige allkirja php.net-is avaldatud release-managerite võtmetega.

**Kas pärast turvaväljalaset tuleb uuesti kompileerida?**  
Jah. Ise ehitatud PHP ei saa distributsioonilt uuendusi. Pärast PHP2Shelli tähendas see: ehitada lähtekood versioonist 8.5.12, 8.4.27, 8.3.36 või 8.2.35, paigaldada ja käivitada kõik PHP protsessid uuesti.

**Kust ma leian kõik configure-valikud?**  
Käsuga ./configure --help lähtekataloogis. Käsiraamat nimetab olulisemad tuumavalikud, laiendite valikud on nende käsiraamatulehtedel.

## Allikad

- [PHP käsiraamat: paigaldus lähtekoodist](https://www.php.net/manual/en/install.unix.source.php)
- [PHP käsiraamat: configure-valikud](https://www.php.net/manual/en/configure.about.php)
- [PHP käsiraamat: FPM-i paigaldamine](https://www.php.net/manual/en/install.fpm.install.php)
- [php.net: lähtekoodipaketid kontrollsummade ja allkirjadega](https://www.php.net/downloads.php)
