Īsi: PHP kompilēt nozīmē lejupielādēt oficiālo pirmkoda pakotni no php.net, ar ./configure noteikt vēlamās saskarnes un paplašinājumus, ar make uzbūvēt, ar make test pārbaudīt un tad instalēt. Tas dod pilnu kontroli pār versiju un apjomu. Cena: par katru drošības atjauninājumu esat atbildīgs pats, kā nesen PHP2Shell gadījumā, kad bija jābūvē no jauna un jāpārstartē visi procesi.
Kad savi PHP būvējumi ir lietderīgi
Lielākā daļa serveru PHP saņem no pakotņu avota: no Linux distributīva, trešās puses repozitorija vai ar konteinera attēlu. Parastai darbībai tā parasti ir labākā izvēle, jo drošības labojumi tiek piegādāti automātiski.
Savi būvējumi tomēr ir vietā:
| Situācija | Pakotņu avots | Savs būvējums |
|---|---|---|
| Parasts tīmekļa serveris | parasti labāk | reti vajadzīgs |
| Versija vai opcija nav uzticamā avotā | nav pieejama | lietderīgi |
| Kļūdu meklēšana pašā PHP, debug būvējums | ierobežoti | lietderīgi |
| Minimāls funkciju apjoms īpašām sistēmām | ierobežoti | lietderīgi |
| Drošības atjauninājumi | nāk ar avotu | paša uzdevums |
Kas izvēlas savus būvējumus, tam vajadzīgs stingrs process atjauninājumiem, citādi priekšrocība kļūst par risku.
Priekšnosacījumi
Saskaņā ar rokasgrāmatu vajadzīgs GNU make un C kompilators; kopš PHP 8.4 kompilatoram jāatbalsta C11. Kas būvē no Git repozitorija, nevis no izlaiduma pakotnes, tam papildus vajadzīgs autoconf (no 2.68), re2c (no 1.0.3 PHP 8.3 un jaunākām) un bison (no 3.0.0). README pirmkodā Ubuntu min šādu sākumu:
sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev
Katram papildu paplašinājumam pievienojas atbilstošās izstrādes pakotnes, piemēram, OpenSSL vai libsodium.
Pirmkoda lejupielāde un īstuma pārbaude
Pašbūvēts PHP ir tikpat uzticams kā tā pirmkods. php.net katru pakotni piedāvā ar SHA-256 kontrolsummu un GPG parakstu; izlaidumu pārvaldnieku atslēgas ir lejupielādes lapā un GPG atslēgu lapā.
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 # salīdzināt ar vērtību php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz
Tikai tad, kad kontrolsumma un paraksts sakrīt, var turpināt.
PHP kompilēšana: configure, make, test
Norisei ir četri soļi:
- Konfigurēt:
./configurear vēlamajām opcijām. Būvējot no Git, iepriekš izpildīt./buildconf. - Būvēt:
make -j"$(nproc)"; darbu skaitam saskaņā ar README lietderīgi atbilst procesora kodolu skaitam. - Testēt:
make TEST_PHP_ARGS=-j4 testpalaiž PHP testu komplektu. - Instalēt:
make install, atkarībā no mērķa direktorija ar root tiesībām.
PHP-FPM būvējuma piemērs ar savu mērķa direktoriju:
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
Svarīgākās opcijas pārskatā:
| Opcija | Iedarbība |
|---|---|
--enable-fpm |
būvē PHP-FPM; papildus --with-fpm-user, --with-fpm-group, --with-fpm-systemd |
--with-config-file-path |
direktorijs, kurā PHP meklē php.ini |
--with-openssl |
OpenSSL atbalsts; kopš PHP 7.4 ceļu atrod ar pkg-config |
--with-sodium |
moderna kriptogrāfija ar libsodium |
--disable-cgi |
atsakās no CGI varianta, ja tas nav vajadzīgs |
--enable-debug |
debug simboli, saskaņā ar README ieteicami izstrādei, nevis produkcijai |
--enable-zts |
pavedienu drošība darbības režīmiem ar pavedieniem |
Ar --prefix var blakus instalēt vairākas pašbūvētas versijas, piemēram, zem /opt/php-8.3 un /opt/php-8.4. Tas atvieglo pārslēgšanos, bet prasa disciplīnu: katra instalētā versija ir sava programmatūra, kas pie katra drošības izlaiduma jābūvē no jauna, arī ja pašlaik neviena vietne to neizmanto. Vairs nevajadzīgi būvējumi pilnībā jānoņem. Kādas opcijas ir esošam būvējumam, rāda php -i rindā „Configure Command“; tā ir labākā veidne nākamajai pārbūvei.
Norāde par OPcache: kopš PHP 8.5 saskaņā ar pieņemto RFC OPcache ir cieši iekompilēts. Vecākās versijās to būvē kā paplašinājumu un ielādē ar zend_extension. Kas ir paplašinājumi un saskarnes, izskaidro PHP paplašinājumu izpratne un SAPI izskaidrots.
Savi būvējumi un drošība: pienākumi pēc PHP2Shell
Pašam kompilētam PHP ir īsta drošības priekšrocība: jūs būvējat tikai to, kas vajadzīgs. Katrs nebūvētais paplašinājums un katrs nebūvētais darbības režīms ir kods, kurā nevar būt ievainojamības. Būvējums bez CGI, ar nedaudziem paplašinājumiem un skaidriem ceļiem ir pārskatāms.
Tam pretī stāv stingrs pienākums. Distributīvi PHP2Shell backport daļēji piegādāja 21.10.2026; kas būvē pats, tas neko nesaņem automātiski. Konkrēti tas nozīmēja:
- Lejupielādēt un pārbaudīt labotās versijas pirmkodu.
- Pārbūvēt ar identiskām opcijām;
php -irāda sākotnējo configure rindu. - Palaist testus un instalēt.
- Pārstartēt visus PHP procesus, kā aprakstīts sadaļā PHP-FPM un visu darbprocesu pārstartēšana.
- Pārbaudīt darbojošos versiju, kā izskaidrots sadaļā PHP versijas un ielāpu stāvokļa pareiza pārbaude.
Pašbūvēts PHP neparādās nevienā pakotņu pārvaldniekā. Vediet uzskaiti, kuros serveros kādā versijā darbojas savi būvējumi, citādi nākamās ievainojamības gadījumā tie tiks palaisti garām.
Kā PHP SOS palīdz konkrēti?
Ar PHP ielāpu servisu mēs atbalstām savu būvējumu operatorus:
- Uzskaitīt esošo: mēs atrodam pašbūvētās PHP versijas un nolasām to būvēšanas opcijas.
- Būvēt no jauna: labotā versija ar pārbaudītu parakstu, tām pašām opcijām un pilnu testu palaišanu.
- Izvietot un pārstartēt: instalēšana, visu procesu pārstartēšana, darbojošās versijas kontrole.
- Vienkāršot: kur uzturēts pakotņu avots kalpo tam pašam mērķim, mēs parādām pāreju uz to.
Biežāk uzdotie jautājumi
Kad ir vērts PHP kompilēt pašam?
Ja vajadzīgā versija vai opcija nav pieejama nevienā uzticamā pakotņu avotā, pašam PHP izstrādei un kļūdu meklēšanai vai ļoti vieglām, īpašām būvēm. Parastiem tīmekļa serveriem uzturētas pakotnes parasti ir labāka izvēle.
Kā pārbaudīt, ka PHP pirmkods ir īsts?
php.net katrai pirmkoda pakotnei piedāvā SHA-256 kontrolsummu un GPG parakstu. Salīdziniet kontrolsummu un pārbaudiet parakstu ar php.net publicētajām izlaidumu pārvaldnieku atslēgām.
Vai pēc drošības izlaiduma jākompilē no jauna?
Jā. Pašbūvēts PHP atjauninājumus no distributīva nesaņem. Pēc PHP2Shell tas nozīmēja: uzbūvēt pirmkodu no 8.5.12, 8.4.27, 8.3.36 vai 8.2.35, instalēt un pārstartēt visus PHP procesus.
Kur atrast visas configure opcijas?
Ar ./configure --help pirmkoda direktorijā. Rokasgrāmata min svarīgākās kodola opcijas, paplašinājumu opcijas ir to rokasgrāmatas lapās.