# Prevajanje PHP iz izvorne kode

> Prevajanje PHP iz izvorne kode: zahteve, možnosti configure, preverjanje podpisa, testi in zakaj lastne izdelave pomenijo lastne obveznosti popravljanja.

Vir: https://phpsos.de/sl/php/php-kompilieren/  
Stanje: 25.10.2026  
Ponudnik: PHP SOS, Nujna pomoč za PHP in varnost strežnikov. Takojšnja pomoč po WhatsAppu: https://wa.me/491736494914?text=Pozdravljeni%2C%20PHP%20SOS%2C%20potrebujemo%20pomo%C4%8D%20z%20na%C5%A1im%20stre%C5%BEnikom%20PHP.%20Podjetje%3A%20%E2%80%A6%20Spletna%20stran%3A%20%E2%80%A6

**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:

```bash
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.

```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                     # 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:

1. **Konfigurirati:** `./configure` z želenimi možnostmi. Pri gradnji iz Git predtem zaženite `./buildconf`.
2. **Zgraditi:** `make -j"$(nproc)"`; število opravil po README smiselno ustreza številu jeder procesorja.
3. **Preizkusiti:** `make TEST_PHP_ARGS=-j4 test` izvede testni nabor PHP.
4. **Namestiti:** `make install`, glede na ciljni imenik s pravicami root.

Primer izdelave PHP-FPM z lastnim ciljnim imenikom:

```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
```

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](https://phpsos.de/sl/php/php-erweiterungen/) in [SAPI razložen](https://phpsos.de/sl/php/sapi-erklaert/).

## 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:

1. Prenesti in preveriti izvorno kodo popravljene različice.
2. Znova zgraditi z enakimi možnostmi; `php -i` pokaže prvotno vrstico configure.
3. Izvesti teste in namestiti.
4. Znova zagnati vse procese PHP, kot je opisano pod [Ponovni zagon PHP-FPM in vseh workerjev](https://phpsos.de/sl/php2shell/php-fpm-neustart/).
5. Preveriti tekočo različico, kot je razloženo pod [Pravilno preverjanje različice PHP in stanja popravkov](https://phpsos.de/sl/php2shell/php-version-pruefen/).

> **Pomembno:**
> 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](https://phpsos.de/sl/leistungen/php-patch-service/) 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.

## Viri

- [Priročnik PHP: namestitev iz izvorne kode](https://www.php.net/manual/en/install.unix.source.php)
- [Priročnik PHP: možnosti configure](https://www.php.net/manual/en/configure.about.php)
- [Priročnik PHP: namestitev FPM](https://www.php.net/manual/en/install.fpm.install.php)
- [php.net: izvorni paketi s kontrolnimi vsotami in podpisi](https://www.php.net/downloads.php)
