# Kompiliranje PHP-a iz izvornog koda

> Kompiliranje PHP-a iz izvornog koda: preduvjeti, configure opcije, provjera potpisa, testovi i zašto vlastite izvedbe znače vlastite obveze zakrpa.

Izvor: https://phpsos.de/hr/php/php-kompilieren/  
Stanje: 25.10.2026  
Pružatelj: PHP SOS, PHP hitna pomoć i sigurnost poslužitelja. Hitna pomoć putem WhatsAppa: https://wa.me/491736494914?text=Pozdrav%20PHP%20SOS%2C%20trebamo%20pomo%C4%87%20s%20na%C5%A1im%20PHP%20poslu%C5%BEiteljem.%20Tvrtka%3A%20%E2%80%A6%20Web-stranica%3A%20%E2%80%A6

**Ukratko:** Kompilirati PHP znači preuzeti službeni izvorni paket s php.net, s `./configure` odrediti željena sučelja i ekstenzije, izgraditi ga s `make`, provjeriti s `make test` i potom instalirati. To daje punu kontrolu nad verzijom i opsegom. Cijena: za svako sigurnosno ažuriranje odgovorni ste sami, kao nedavno kod PHP2Shella, kad je trebalo iznova izgraditi i ponovno pokrenuti sve procese.

## Kada su vlastite PHP izvedbe smislene

Većina poslužitelja PHP dobiva iz izvora paketa: iz Linux distribucije, repozitorija treće strane ili putem container slike. To je za uobičajeni rad uglavnom najbolji izbor jer se sigurnosni ispravci isporučuju automatski.

Vlastite izvedbe ipak imaju svoje mjesto:

| Situacija | Izvor paketa | Vlastita izvedba |
|---|---|---|
| Uobičajeni web-poslužitelj | uglavnom bolje | rijetko potrebno |
| Verzija ili opcija nije u pouzdanom izvoru | nije dostupno | smisleno |
| Traženje pogrešaka u samom PHP-u, debug izvedba | ograničeno | smisleno |
| Minimalan opseg funkcija za posebne sustave | ograničeno | smisleno |
| Sigurnosna ažuriranja | stižu s izvorom | vlastita zadaća |

Tko se odluči za vlastite izvedbe, treba čvrst proces za ažuriranja, inače prednost postaje rizik.

## Preduvjeti

Prema priručniku potrebni su GNU make i C kompilator; od PHP-a 8.4 kompilator mora podržavati C11. Tko gradi iz Git repozitorija umjesto iz paketa izdanja, dodatno treba autoconf (od 2.68), re2c (od 1.0.3 za PHP 8.3 i novije) i bison (od 3.0.0). README u izvornom kodu za Ubuntu navodi ovaj početak:

```bash
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
```

Za svaku dodatnu ekstenziju dolaze odgovarajući razvojni paketi, primjerice za OpenSSL ili libsodium.

## Preuzimanje izvornog koda i provjera autentičnosti

Samostalno izgrađen PHP pouzdan je koliko i njegov izvorni kod. php.net svaki paket nudi sa SHA-256 kontrolnim zbrojem i GPG potpisom; ključevi release managera nalaze se na stranici za preuzimanje i na stranici s GPG ključevima.

```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                     # usporediti s vrijednošću na php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
```

Tek kad se kontrolni zbroj i potpis podudaraju, ide se dalje.

## Kompiliranje PHP-a: configure, make, test

Tijek ima četiri koraka:

1. **Konfigurirati:** `./configure` sa željenim opcijama. Pri gradnji iz Gita prethodno izvršiti `./buildconf`.
2. **Izgraditi:** `make -j"$(nproc)"`; broj poslova prema README-u smisleno odgovara broju jezgri procesora.
3. **Testirati:** `make TEST_PHP_ARGS=-j4 test` izvršava PHP-ov testni paket.
4. **Instalirati:** `make install`, ovisno o odredišnom direktoriju s root pravima.

Primjer PHP-FPM izvedbe s vlastitim odredišnim direktorijem:

```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
```

Najvažnije opcije u pregledu:

| Opcija | Učinak |
|---|---|
| `--enable-fpm` | gradi PHP-FPM; uz to `--with-fpm-user`, `--with-fpm-group`, `--with-fpm-systemd` |
| `--with-config-file-path` | direktorij u kojem PHP traži php.ini |
| `--with-openssl` | podrška za OpenSSL; od PHP-a 7.4 putanja se pronalazi putem pkg-configa |
| `--with-sodium` | moderna kriptografija s libsodiumom |
| `--disable-cgi` | izostavlja CGI varijantu ako nije potrebna |
| `--enable-debug` | debug simboli, prema README-u preporučeno za razvoj, ne za produkciju |
| `--enable-zts` | sigurnost dretvi za načine rada s dretvama |

S `--prefix` može se instalirati više samostalno izgrađenih verzija jednu uz drugu, primjerice pod `/opt/php-8.3` i `/opt/php-8.4`. To olakšava prelaske, ali traži disciplinu: svaka instalirana verzija zaseban je softver koji se mora iznova izgraditi pri svakom sigurnosnom izdanju, čak i ako je trenutačno nijedna web-stranica ne koristi. Izvedbe koje više nisu potrebne treba potpuno ukloniti. Koje opcije ima postojeća izvedba, pokazuje `php -i` u retku „Configure Command“; to je najbolji predložak za sljedeću ponovnu gradnju.

Napomena o OPcacheu: od PHP-a 8.5 OPcache je prema prihvaćenom RFC-u čvrsto ugrađen. Kod starijih verzija gradi se kao ekstenzija i učitava putem `zend_extension`. Što su ekstenzije i sučelja, objašnjavaju [Razumijevanje PHP ekstenzija](https://phpsos.de/hr/php/php-erweiterungen/) i [SAPI objašnjen](https://phpsos.de/hr/php/sapi-erklaert/).

## Vlastite izvedbe i sigurnost: obveze nakon PHP2Shella

Samostalno kompiliran PHP ima stvarnu sigurnosnu prednost: gradite samo ono što trebate. Svaka neizgrađena ekstenzija i svaki neizgrađeni način rada kod je koji ne može sadržavati ranjivost. Izvedba bez CGI-ja, s malo ekstenzija i jasnim putanjama pregledna je.

Tome se suprotstavlja tvrda obveza. Distribucije su kod PHP2Shella backportove djelomično isporučile 21. 10. 2026.; tko gradi sâm, ne dobiva ništa automatski. Konkretno je to značilo:

1. Preuzeti i provjeriti izvorni kod verzije s ispravkom.
2. Iznova izgraditi s istim opcijama; `php -i` pokazuje izvorni configure redak.
3. Izvršiti testove i instalirati.
4. Ponovno pokrenuti sve PHP procese, kako je opisano na stranici [Ponovno pokretanje PHP-FPM-a i svih workera](https://phpsos.de/hr/php2shell/php-fpm-neustart/).
5. Provjeriti pokrenutu verziju, kako je objašnjeno na stranici [Ispravna provjera verzije i razine zakrpa PHP-a](https://phpsos.de/hr/php2shell/php-version-pruefen/).

> **Važno:**
> Samostalno izgrađen PHP ne pojavljuje se ni u jednom upravitelju paketa. Vodite inventar na kojim poslužiteljima rade vlastite izvedbe u kojoj verziji, inače će pri sljedećoj ranjivosti biti previđene.

## Kako PHP SOS konkretno pomaže?

Putem [PHP patch servisa](https://phpsos.de/hr/leistungen/php-patch-service/) podupiremo operatere vlastitih izvedbi:

- **Popisati stanje:** Pronalazimo samostalno izgrađene verzije PHP-a i očitavamo njihove opcije gradnje.
- **Iznova izgraditi:** Verzija s ispravkom s provjerenim potpisom, istim opcijama i potpunim testnim prolazom.
- **Postaviti i ponovno pokrenuti:** Instalacija, ponovno pokretanje svih procesa, provjera pokrenute verzije.
- **Pojednostaviti:** Gdje održavani izvor paketa ispunjava istu svrhu, pokazujemo prelazak na njega.


## Česta pitanja

**Kada se isplati sam kompilirati PHP?**  
Ako tražena verzija ili opcija nije dostupna ni u jednom pouzdanom izvoru paketa, za razvoj i traženje pogrešaka u samom PHP-u ili za vrlo vitke, posebne izvedbe. Za uobičajene web-poslužitelje održavani su paketi uglavnom bolji izbor.

**Kako provjeriti je li PHP izvorni kod autentičan?**  
php.net uz svaki izvorni paket nudi SHA-256 kontrolni zbroj i GPG potpis. Usporedite kontrolni zbroj i provjerite potpis ključevima release managera objavljenima na php.net.

**Moram li nakon sigurnosnog izdanja ponovno kompilirati?**  
Da. Samostalno izgrađen PHP ne dobiva ažuriranja od distribucije. Nakon PHP2Shella to je značilo: izgraditi izvorni kod verzije 8.5.12, 8.4.27, 8.3.36 ili 8.2.35, instalirati ga i ponovno pokrenuti sve PHP procese.

**Gdje nalazim sve configure opcije?**  
S ./configure --help u izvornom direktoriju. Priručnik navodi najvažnije temeljne opcije, a opcije za ekstenzije nalaze se na njihovim stranicama priručnika.

## Izvori

- [PHP priručnik: Instalacija iz izvornog koda](https://www.php.net/manual/en/install.unix.source.php)
- [PHP priručnik: configure opcije](https://www.php.net/manual/en/configure.about.php)
- [PHP priručnik: Instalacija FPM-a](https://www.php.net/manual/en/install.fpm.install.php)
- [php.net: Izvorni paketi s kontrolnim zbrojevima i potpisima](https://www.php.net/downloads.php)
