Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

Kompiliranje PHP-a iz izvornog koda

PHP se može sam izgraditi s configureom i makeom. To daje kontrolu nad ekstenzijama i opcijama, ali i punu odgovornost za svako sigurnosno ažuriranje.

Stanje 5 min čitanjaPHP znanje

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:

  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:

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:

  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.
  5. Provjeriti pokrenutu verziju, kako je objašnjeno na stranici Ispravna provjera verzije i razine zakrpa PHP-a.
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 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

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć