Na kratko: Prevesti PHP pomeni z php.net prenesti uradni izvorni paket, z ./configure določiti želene vmesnike in razširitve, z make zgraditi, z make test preveriti in nato namestiti. To da polni nadzor nad različico in obsegom. Cena: za vsako varnostno posodobitev ste odgovorni sami, kot nazadnje pri PHP2Shell, ko je bilo treba znova zgraditi in znova zagnati vse procese.
Kdaj so lastne izdelave PHP smiselne
Večina strežnikov PHP prejema iz vira paketov: iz distribucije Linux, repozitorija tretjega ponudnika ali prek slike vsebnika. To je za običajno obratovanje praviloma najboljša izbira, ker se varnostni popravki dostavljajo samodejno.
Lastne izdelave imajo kljub temu svoje mesto:
| Situacija | Vir paketov | Lastna izdelava |
|---|---|---|
| Običajen spletni strežnik | praviloma boljše | redko potrebno |
| Različica ali možnost ni v zaupanja vrednem viru | ni na voljo | smiselno |
| Iskanje napak v samem PHP, izdelava za razhroščevanje | omejeno | smiselno |
| Minimalen obseg funkcij za posebne sisteme | omejeno | smiselno |
| Varnostne posodobitve | pridejo z virom | lastna naloga |
Kdor se odloči za lastne izdelave, potrebuje fiksen postopek za posodobitve, sicer prednost postane tveganje.
Zahteve
Po priročniku sta potrebna GNU make in prevajalnik C; od PHP 8.4 mora prevajalnik podpirati C11. Kdor gradi iz repozitorija Git namesto iz izdajnega paketa, dodatno potrebuje autoconf (od 2.68), re2c (od 1.0.3 za PHP 8.3 in novejši) in bison (od 3.0.0). README v izvorni kodi za Ubuntu navaja ta začetek:
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
Za vsako dodatno razširitev pridejo zraven ustrezni razvojni paketi, na primer za OpenSSL ali libsodium.
Prenos izvorne kode in preverjanje pristnosti
Sam zgrajen PHP je tako zaupanja vreden kot njegova izvorna koda. php.net vsak paket ponuja s kontrolno vsoto SHA-256 in podpisom GPG; ključi upravljavcev izdaj so na strani za prenos in na strani s ključi GPG.
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 # primerjati z vrednostjo na php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
Šele ko kontrolna vsota in podpis sovpadata, se gre naprej.
Prevajanje PHP: configure, make, test
Postopek ima štiri korake:
- Konfigurirati:
./configurez želenimi možnostmi. Pri gradnji iz Git predtem zaženite./buildconf. - Zgraditi:
make -j"$(nproc)"; število opravil po README smiselno ustreza številu jeder procesorja. - Preizkusiti:
make TEST_PHP_ARGS=-j4 testizvede testni nabor PHP. - Namestiti:
make install, glede na ciljni imenik s pravicami root.
Primer izdelave PHP-FPM z lastnim ciljnim imenikom:
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
Najpomembnejše možnosti na hitro:
| Možnost | Učinek |
|---|---|
--enable-fpm |
zgradi PHP-FPM; zraven --with-fpm-user, --with-fpm-group, --with-fpm-systemd |
--with-config-file-path |
imenik, v katerem PHP išče php.ini |
--with-openssl |
podpora OpenSSL; od PHP 7.4 se pot najde prek pkg-config |
--with-sodium |
sodobna kriptografija z libsodium |
--disable-cgi |
opusti različico CGI, če je ne potrebujete |
--enable-debug |
simboli za razhroščevanje, po README priporočeni za razvoj, ne za produkcijo |
--enable-zts |
nitna varnost za načine delovanja z nitmi |
Z --prefix je mogoče več sam zgrajenih različic namestiti druga ob drugi, na primer pod /opt/php-8.3 in /opt/php-8.4. To olajša preklope, zahteva pa disciplino: vsaka nameščena različica je lastna programska oprema, ki jo je treba ob vsaki varnostni izdaji znova zgraditi, tudi če je trenutno nobena spletna stran ne uporablja. Izdelave, ki jih ni več treba, je treba v celoti odstraniti. Katere možnosti ima obstoječa izdelava, pokaže php -i v vrstici „Configure Command“; to je najboljša predloga za naslednjo novo gradnjo.
Opomba o OPcache: od PHP 8.5 je OPcache po sprejetem RFC trdno vkompiliran. Pri starejših različicah se zgradi kot razširitev in naloži prek zend_extension. Kaj so razširitve in vmesniki, razlagata Razumevanje razširitev PHP in SAPI razložen.
Lastne izdelave in varnost: obveznosti po PHP2Shell
Samo prevedeni PHP ima pravo varnostno prednost: gradite samo, kar potrebujete. Vsaka nezgrajena razširitev in vsak nezgrajen način delovanja je koda, ki ne more vsebovati vrzeli. Izdelava brez CGI, z malo razširitvami in jasnimi potmi je pregledna.
Temu stoji nasproti trda obveznost. Distribucije so pri PHP2Shell backporte delno dostavile 21. 10. 2026; kdor gradi sam, ne dobi ničesar samodejno. Konkretno je to pomenilo:
- Prenesti in preveriti izvorno kodo popravljene različice.
- Znova zgraditi z enakimi možnostmi;
php -ipokaže prvotno vrstico configure. - Izvesti teste in namestiti.
- Znova zagnati vse procese PHP, kot je opisano pod Ponovni zagon PHP-FPM in vseh workerjev.
- Preveriti tekočo različico, kot je razloženo pod Pravilno preverjanje različice PHP in stanja popravkov.
Sam zgrajen PHP se ne pojavi v nobenem upravljalniku paketov. Vodite popis, na katerih strežnikih teče katera lastna izdelava v kateri različici, sicer jih bodo ob naslednji vrzeli spregledali.
Kako PHP SOS pomaga konkretno?
S storitvijo popravljanja PHP podpiramo upravljavce lastnih izdelav:
- Zajeti stanje: poiščemo sam zgrajene različice PHP in preberemo njihove možnosti gradnje.
- Znova zgraditi: popravljena različica s preverjenim podpisom, enakimi možnostmi in popolnim testnim zagonom.
- Razdeliti in znova zagnati: namestitev, ponovni zagon vseh procesov, kontrola tekoče različice.
- Poenostaviti: kjer vzdrževan vir paketov izpolni isti namen, pokažemo prehod nanj.
Pogosta vprašanja
Kdaj se splača PHP prevesti sam?
Kadar potrebna različica ali možnost ni na voljo v nobenem zaupanja vrednem viru paketov, za razvoj in iskanje napak v samem PHP ali za zelo vitke, posebne izdelave. Za običajne spletne strežnike so vzdrževani paketi praviloma boljša izbira.
Kako preverim, da je izvorna koda PHP pristna?
php.net za vsak izvorni paket ponuja kontrolno vsoto SHA-256 in podpis GPG. Primerjajte kontrolno vsoto in preverite podpis s ključi upravljavcev izdaj, objavljenimi na php.net.
Ali moram po varnostni izdaji znova prevesti?
Da. Sam zgrajen PHP od distribucije ne prejema posodobitev. Po PHP2Shell je to pomenilo: zgraditi izvorno kodo 8.5.12, 8.4.27, 8.3.36 ali 8.2.35, jo namestiti in znova zagnati vse procese PHP.
Kje najdem vse možnosti configure?
Z ./configure --help v izvornem imeniku. Priročnik navaja najpomembnejše jedrne možnosti, možnosti za razširitve so na straneh priročnika o njih.