Lyhyesti: PHP:n kääntäminen tarkoittaa, että php.netistä ladataan virallinen lähdepaketti, komennolla ./configure määritetään halutut rajapinnat ja laajennukset, rakennetaan komennolla make, tarkistetaan komennolla make test ja asennetaan sitten. Se antaa täyden hallinnan versioon ja laajuuteen. Hintana on, että jokaisesta tietoturvapäivityksestä vastaatte itse, kuten viimeksi PHP2Shellin kohdalla, jolloin oli rakennettava uudelleen ja kaikki prosessit käynnistettävä uudelleen.
Milloin omat PHP-koonnit ovat järkeviä
Useimmat palvelimet saavat PHP:n pakettilähteestä: Linux-jakelusta, kolmannen osapuolen repositoriosta tai konttikuvasta. Se on tavalliseen käyttöön yleensä paras valinta, koska tietoturvakorjaukset toimitetaan perässä automaattisesti.
Omille koonneille on silti paikkansa:
| Tilanne | Pakettilähde | Oma koonti |
|---|---|---|
| Tavallinen verkkopalvelin | yleensä parempi | harvoin tarpeen |
| Versio tai valitsin ei ole luotettavassa lähteessä | ei saatavilla | järkevä |
| PHP:n itsensä vianetsintä, debug-koonti | rajallinen | järkevä |
| Minimaalinen toiminnallisuus erikoisjärjestelmille | rajallinen | järkevä |
| Tietoturvapäivitykset | tulevat lähteen mukana | oma tehtävä |
Se, joka päättää omista koonneista, tarvitsee kiinteän prosessin päivityksille, muuten etu muuttuu riskiksi.
Vaatimukset
Käsikirjan mukaan tarvitaan GNU make ja C-kääntäjä; versiosta PHP 8.4 lähtien kääntäjän on tuettava C11-standardia. Jos rakennetaan Git-repositoriosta julkaisupaketin sijaan, tarvitaan lisäksi autoconf (versiosta 2.68), re2c (versiosta 1.0.3 PHP 8.3:lle ja uudemmille) ja bison (versiosta 3.0.0). Lähdekoodin README mainitsee Ubuntulle tämän aloituksen:
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
Jokaista lisälaajennusta varten tarvitaan sopivat kehityspaketit, esimerkiksi OpenSSL:lle tai libsodiumille.
Lähdekoodin lataus ja aitouden tarkistus
Itse rakennettu PHP on yhtä luotettava kuin sen lähdekoodi. php.net tarjoaa jokaisen paketin SHA-256-tarkistussummalla ja GPG-allekirjoituksella; julkaisuvastaavien avaimet ovat lataussivulla ja GPG-avainten sivulla.
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 # vertaa arvoon php.netissä
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
Vasta kun tarkistussumma ja allekirjoitus täsmäävät, jatketaan.
PHP:n kääntäminen: configure, make, test
Kulussa on neljä vaihetta:
- Konfigurointi:
./configurehalutuilla valitsimilla. Git-rakennuksessa ensin ajetaan./buildconf. - Rakennus:
make -j"$(nproc)"; töiden määrä vastaa README:n mukaan järkevästi prosessoriydinten määrää. - Testaus:
make TEST_PHP_ARGS=-j4 testajaa PHP:n testipatterin. - Asennus:
make install, kohdehakemistosta riippuen root-oikeuksilla.
Esimerkki PHP-FPM-koonnista omaan kohdehakemistoon:
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
Tärkeimmät valitsimet yleiskatsauksena:
| Valitsin | Vaikutus |
|---|---|
--enable-fpm |
rakentaa PHP-FPM:n; lisäksi --with-fpm-user, --with-fpm-group, --with-fpm-systemd |
--with-config-file-path |
hakemisto, josta PHP etsii php.ini-tiedoston |
--with-openssl |
OpenSSL-tuki; versiosta PHP 7.4 lähtien polku löytyy pkg-configin kautta |
--with-sodium |
moderni kryptografia libsodiumilla |
--disable-cgi |
jättää CGI-variantin pois, jos sitä ei tarvita |
--enable-debug |
debug-symbolit, README:n mukaan suositeltu kehitykseen, ei tuotantoon |
--enable-zts |
säieturvallisuus säikeitä käyttäviin ajotapoihin |
Valitsimella --prefix useita itse rakennettuja versioita voi asentaa rinnakkain, esimerkiksi hakemistoihin /opt/php-8.3 ja /opt/php-8.4. Se helpottaa siirtymiä mutta vaatii kuria: jokainen asennettu versio on omaa ohjelmistoa, joka on rakennettava uudelleen jokaisen tietoturvajulkaisun yhteydessä, vaikka mikään verkkosivusto ei juuri nyt käyttäisikään sitä. Tarpeettomat koonnit kuuluu poistaa kokonaan. Se, mitä valitsimia olemassa olevassa koonnissa on, näkyy komennolla php -i rivillä ”Configure Command”; se on paras pohja seuraavalle uudelleenrakennukselle.
Huomautus OPcachesta: versiosta PHP 8.5 lähtien OPcache on hyväksytyn RFC:n mukaan käännetty kiinteästi mukaan. Vanhemmissa versioissa se rakennetaan laajennuksena ja ladataan direktiivillä zend_extension. Mitä laajennukset ja rajapinnat ovat, selittävät PHP-laajennusten ymmärtäminen ja SAPI selitettynä.
Omat koonnit ja tietoturva: velvoitteet PHP2Shellin jälkeen
Itse käännetyllä PHP:llä on todellinen tietoturvaetu: rakennatte vain sen, mitä tarvitsette. Jokainen rakentamatta jätetty laajennus ja jokainen rakentamatta jätetty ajotapa on koodia, jossa ei voi olla aukkoa. Koonti ilman CGI:tä, harvoilla laajennuksilla ja selkeillä poluilla on helposti hallittava.
Vastapainona on kova velvoite. Jakelut toimittivat PHP2Shellin takaisinporttaukset osin 21.10.2026; itse rakentava ei saa mitään automaattisesti. Käytännössä se tarkoitti:
- Lataa korjausversion lähdekoodi ja tarkista se.
- Rakenna uudelleen identtisillä valitsimilla;
php -inäyttää alkuperäisen configure-rivin. - Aja testit ja asenna.
- Käynnistä kaikki PHP-prosessit uudelleen, kuten kohdassa PHP-FPM:n ja kaikkien workerien uudelleenkäynnistys on kuvattu.
- Tarkista käytössä oleva versio, kuten kohdassa PHP-version ja korjaustilan oikea tarkistus selitetään.
Itse rakennettu PHP ei näy missään paketinhallinnassa. Pitäkää inventaariota siitä, millä palvelimilla omat koonnit ovat käytössä missäkin versiossa, muuten ne unohtuvat seuraavan aukon kohdalla.
Miten PHP SOS auttaa konkreettisesti?
PHP-korjauspalvelun kautta tuemme omien koontien ylläpitäjiä:
- Kannan kartoitus: Löydämme itse rakennetut PHP-versiot ja luemme niiden rakennusvalitsimet.
- Uudelleenrakennus: Korjausversio tarkistetulla allekirjoituksella, samoilla valitsimilla ja täydellisellä testiajolla.
- Käyttöönotto ja uudelleenkäynnistys: Asennus, kaikkien prosessien uudelleenkäynnistys, käytössä olevan version tarkistus.
- Yksinkertaistaminen: Missä ylläpidetty pakettilähde täyttää saman tarkoituksen, näytämme siirtymän.
Usein kysytyt kysymykset
Milloin PHP:n kääntäminen itse kannattaa?
Kun tarvittavaa versiota tai valitsinta ei ole saatavilla missään luotettavassa pakettilähteessä, PHP:n itsensä kehitykseen ja vianetsintään tai hyvin kevyisiin erikoiskoonteihin. Tavallisilla verkkopalvelimilla ylläpidetyt paketit ovat yleensä parempi valinta.
Miten tarkistan, että PHP:n lähdekoodi on aito?
php.net tarjoaa jokaiselle lähdepaketille SHA-256-tarkistussumman ja GPG-allekirjoituksen. Vertaa tarkistussummaa ja tarkista allekirjoitus julkaisuvastaavien php.netissä julkaistuilla avaimilla.
Pitääkö tietoturvajulkaisun jälkeen kääntää uudelleen?
Pitää. Itse rakennettu PHP ei saa päivityksiä jakelulta. PHP2Shellin jälkeen se tarkoitti: rakenna versioiden 8.5.12, 8.4.27, 8.3.36 tai 8.2.35 lähdekoodista, asenna ja käynnistä kaikki PHP-prosessit uudelleen.
Mistä löydän kaikki configure-valitsimet?
Komennolla ./configure --help lähdehakemistossa. Käsikirja mainitsee tärkeimmät ydinvalitsimet, laajennusten valitsimet ovat niiden käsikirjasivuilla.