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:
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.
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:
- Konfigurirati:
./configuresa željenim opcijama. Pri gradnji iz Gita prethodno izvršiti./buildconf. - Izgraditi:
make -j"$(nproc)"; broj poslova prema README-u smisleno odgovara broju jezgri procesora. - Testirati:
make TEST_PHP_ARGS=-j4 testizvršava PHP-ov testni paket. - Instalirati:
make install, ovisno o odredišnom direktoriju s root pravima.
Primjer PHP-FPM izvedbe s vlastitim odredišnim direktorijem:
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 i SAPI objašnjen.
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:
- Preuzeti i provjeriti izvorni kod verzije s ispravkom.
- Iznova izgraditi s istim opcijama;
php -ipokazuje izvorni configure redak. - Izvršiti testove i instalirati.
- Ponovno pokrenuti sve PHP procese, kako je opisano na stranici Ponovno pokretanje PHP-FPM-a i svih workera.
- Provjeriti pokrenutu verziju, kako je objašnjeno na stranici Ispravna provjera verzije i razine zakrpa PHP-a.
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 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.