Lühidalt: PHP kompileerimine tähendab ametliku lähtekoodipaketi allalaadimist php.net-ist, soovitud liideste ja laiendite määramist käsuga ./configure, ehitamist käsuga make, kontrollimist käsuga make test ja seejärel paigaldamist. See annab täieliku kontrolli versiooni ja mahu üle. Hind: iga turvauuenduse eest vastutate ise, nagu viimati PHP2Shelli puhul, mil tuli uuesti ehitada ja kõik protsessid uuesti käivitada.
Millal on oma PHP ehitused mõistlikud
Enamik servereid saab PHP paketiallikast: Linuxi distributsioonist, kolmanda osapoole hoidlast või konteinerikujutise kaudu. See on tavatööks enamasti parim valik, sest turvaparandused tarnitakse automaatselt.
Oma ehitustel on siiski oma koht:
| Olukord | Paketiallikas | Oma ehitus |
|---|---|---|
| Tavaline veebiserver | enamasti parem | harva vajalik |
| Versioon või valik ei ole usaldusväärses allikas | ei ole saadaval | mõistlik |
| Veaotsing PHP enda juures, debug-ehitus | piiratud | mõistlik |
| Minimaalne funktsioonide maht erisüsteemidele | piiratud | mõistlik |
| Turvauuendused | tulevad allikaga | oma ülesanne |
Kes otsustab oma ehituste kasuks, vajab uuenduste jaoks kindlat protsessi, muidu muutub eelis riskiks.
Eeldused
Käsiraamatu järgi on vaja GNU make'i ja C-kompilaatorit; alates PHP 8.4-st peab kompilaator toetama C11. Kes ehitab Git-hoidlast, mitte väljalaskepaketist, vajab lisaks autoconf'i (alates 2.68), re2c'd (alates 1.0.3 PHP 8.3 ja uuema jaoks) ja bison'i (alates 3.0.0). Lähtekoodi README nimetab Ubuntu jaoks selle sissejuhatuse:
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
Iga täiendava laiendi jaoks lisanduvad sobivad arenduspaketid, näiteks OpenSSL-i või libsodiumi jaoks.
Lähtekoodi allalaadimine ja ehtsuse kontroll
Ise ehitatud PHP on nii usaldusväärne kui selle lähtekood. php.net pakub iga paketti SHA-256 kontrollsumma ja GPG allkirjaga; release-managerite võtmed on allalaadimislehel ja GPG-võtmete lehel.
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 # võrrelda php.net-is oleva väärtusega
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
Alles siis, kui kontrollsumma ja allkiri klapivad, minnakse edasi.
PHP kompileerimine: configure, make, test
Kulg koosneb neljast sammust:
- Seadistamine:
./configuresoovitud valikutega. Git-ist ehitamisel enne käivitada./buildconf. - Ehitamine:
make -j"$(nproc)"; tööde arv vastab README järgi mõistlikult protsessorituumade arvule. - Testimine:
make TEST_PHP_ARGS=-j4 testkäivitab PHP testikomplekti. - Paigaldamine:
make install, olenevalt sihtkataloogist root-õigustega.
Näide PHP-FPM ehituse kohta oma sihtkataloogiga:
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
Olulisemad valikud ülevaatlikult:
| Valik | Mõju |
|---|---|
--enable-fpm |
ehitab PHP-FPM-i; lisaks --with-fpm-user, --with-fpm-group, --with-fpm-systemd |
--with-config-file-path |
kataloog, kust PHP otsib php.ini |
--with-openssl |
OpenSSL-i tugi; alates PHP 7.4-st leitakse tee pkg-config'i kaudu |
--with-sodium |
kaasaegne krüptograafia libsodiumiga |
--disable-cgi |
jätab CGI variandi ehitamata, kui seda ei vajata |
--enable-debug |
silumissümbolid, README järgi soovitatav arenduseks, mitte tootmiseks |
--enable-zts |
lõimeohutus lõimedega töörežiimide jaoks |
Valikuga --prefix saab mitu ise ehitatud versiooni kõrvuti paigaldada, näiteks kataloogidesse /opt/php-8.3 ja /opt/php-8.4. See lihtsustab ümberlülitusi, kuid nõuab distsipliini: iga paigaldatud versioon on oma tarkvara, mis tuleb igal turvaväljalaskel uuesti ehitada, isegi kui ükski veebisait seda parajasti ei kasuta. Enam mittevajalikud ehitused tuleb täielikult eemaldada. Milliseid valikuid olemasolev ehitus kasutab, näitab php -i real „Configure Command“; see on parim mall järgmiseks uuesti ehitamiseks.
Märkus OPcache'i kohta: alates PHP 8.5-st on OPcache vastu võetud RFC järgi kindlalt sisse kompileeritud. Vanemate versioonide puhul ehitatakse see laiendusena ja laaditakse käsuga zend_extension. Mis on laiendused ja liidesed, selgitavad PHP laiendite mõistmine ja SAPI selgitus.
Oma ehitused ja turvalisus: kohustused pärast PHP2Shelli
Ise kompileeritud PHP-l on tõeline turvaeelis: ehitate ainult seda, mida vajate. Iga ehitamata laiendus ja iga ehitamata töörežiim on kood, mis ei saa turvaauku sisaldada. Ehitus ilma CGI-ta, vähese arvu laiendite ja selgete teedega on ülevaatlik.
Sellele vastandub range kohustus. Distributsioonid tarnisid PHP2Shelli backport'e osaliselt 21.10.2026; kes ehitab ise, ei saa midagi automaatselt. Konkreetselt tähendas see:
- Laadida parandatud versiooni lähtekood ja kontrollida see.
- Ehitada uuesti identsete valikutega;
php -inäitab algset configure-rida. - Käivitada testid ja paigaldada.
- Käivitada kõik PHP protsessid uuesti, nagu on kirjeldatud lehel PHP-FPM-i ja kõigi workerite taaskäivitamine.
- Kontrollida töötavat versiooni, nagu on selgitatud lehel PHP versiooni ja paigaseisu õige kontrollimine.
Ise ehitatud PHP ei ilmu üheski paketihalduris. Pidage inventari, millistes serverites töötavad oma ehitused millises versioonis, muidu jäävad need järgmise turvaaugu korral märkamata.
Kuidas PHP SOS konkreetselt aitab?
PHP paikamisteenuse kaudu toetame oma ehituste haldajaid:
- Olemasoleva kaardistamine: Leiame ise ehitatud PHP versioonid ja loeme välja nende ehitusvalikud.
- Uuesti ehitamine: Parandatud versioon kontrollitud allkirja, samade valikute ja täieliku testijooksuga.
- Väljaveeretamine ja taaskäivitus: Paigaldus, kõigi protsesside taaskäivitus, töötava versiooni kontroll.
- Lihtsustamine: Kus hooldatud paketiallikas täidab sama eesmärki, näitame ülemineku.
Korduma kippuvad küsimused
Millal tasub PHP-d ise kompileerida?
Kui vajalik versioon või valik ei ole ühegi usaldusväärse paketiallika kaudu saadaval, PHP enda arenduseks ja veaotsinguks või väga kitsaste, eriliste ehituste jaoks. Tavaliste veebiserverite jaoks on hooldatud paketid enamasti parem valik.
Kuidas ma kontrollin, et PHP lähtekood on ehtne?
php.net pakub iga lähtekoodipaketi juurde SHA-256 kontrollsumma ja GPG allkirja. Võrrelge kontrollsummat ja kontrollige allkirja php.net-is avaldatud release-managerite võtmetega.
Kas pärast turvaväljalaset tuleb uuesti kompileerida?
Jah. Ise ehitatud PHP ei saa distributsioonilt uuendusi. Pärast PHP2Shelli tähendas see: ehitada lähtekood versioonist 8.5.12, 8.4.27, 8.3.36 või 8.2.35, paigaldada ja käivitada kõik PHP protsessid uuesti.
Kust ma leian kõik configure-valikud?
Käsuga ./configure --help lähtekataloogis. Käsiraamat nimetab olulisemad tuumavalikud, laiendite valikud on nende käsiraamatulehtedel.