# PHP kompilēšana no pirmkoda

> PHP kompilēšana no pirmkoda: priekšnosacījumi, configure opcijas, paraksta pārbaude, testi un kāpēc saviem būvējumiem ir savi ielāpošanas pienākumi.

Avots: https://phpsos.de/lv/php/php-kompilieren/  
Aktuāls uz: 25.10.2026  
Pakalpojuma sniedzējs: PHP SOS, PHP ārkārtas palīdzība un serveru drošība. Tūlītēja palīdzība pa WhatsApp: https://wa.me/491736494914?text=Sveiki%2C%20PHP%20SOS%2C%20mums%20nepiecie%C5%A1ama%20pal%C4%ABdz%C4%ABba%20ar%20m%C5%ABsu%20PHP%20serveri.%20Uz%C5%86%C4%93mums%3A%20%E2%80%A6%20Vietne%3A%20%E2%80%A6

**Ī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:

```bash
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ā.

```bash
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:

1. **Konfigurēt:** `./configure` ar vēlamajām opcijām. Būvējot no Git, iepriekš izpildīt `./buildconf`.
2. **Būvēt:** `make -j"$(nproc)"`; darbu skaitam saskaņā ar README lietderīgi atbilst procesora kodolu skaitam.
3. **Testēt:** `make TEST_PHP_ARGS=-j4 test` palaiž PHP testu komplektu.
4. **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:

```bash
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](https://phpsos.de/lv/php/php-erweiterungen/) un [SAPI izskaidrots](https://phpsos.de/lv/php/sapi-erklaert/).

## 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:

1. Lejupielādēt un pārbaudīt labotās versijas pirmkodu.
2. Pārbūvēt ar identiskām opcijām; `php -i` rāda sākotnējo configure rindu.
3. Palaist testus un instalēt.
4. Pārstartēt visus PHP procesus, kā aprakstīts sadaļā [PHP-FPM un visu darbprocesu pārstartēšana](https://phpsos.de/lv/php2shell/php-fpm-neustart/).
5. Pārbaudīt darbojošos versiju, kā izskaidrots sadaļā [PHP versijas un ielāpu stāvokļa pareiza pārbaude](https://phpsos.de/lv/php2shell/php-version-pruefen/).

> **Svarīgi:**
> 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](https://phpsos.de/lv/leistungen/php-patch-service/) 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.

## Avoti

- [PHP rokasgrāmata: instalēšana no pirmkoda](https://www.php.net/manual/en/install.unix.source.php)
- [PHP rokasgrāmata: configure opcijas](https://www.php.net/manual/en/configure.about.php)
- [PHP rokasgrāmata: FPM instalēšana](https://www.php.net/manual/en/install.fpm.install.php)
- [php.net: pirmkoda pakotnes ar kontrolsummām un parakstiem](https://www.php.net/downloads.php)
