# PHP pamatzināšanas administratoriem

> PHP pamati administratoriem: binārfaili, php.ini līmeņi, FPM pūli, svarīgākās komandas, žurnālfaili un pārbaudes saraksts pēc PHP2Shell.

Avots: https://phpsos.de/lv/php/php-grundwissen-admins/  
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:** administratoriem bez izstrādātāja pieredzes, lai PHP darbinātu droši, pietiek ar piecām pamatlietām: PHP sastāv no vairākām programmām (komandrinda, PHP-FPM, Apache modulis), katrai ar savu versiju; iestatījumi iedarbojas līmeņos no php.ini līdz lietojumprogrammai; PHP-FPM sadala pieprasījumus darbprocesos pūlos; atjauninājums iedarbojas tikai pēc visu procesu pārstartēšanas; un žurnāli ir svarīgākā norāde, kad kaut kas nav kārtībā. Kas šos punktus pārzina, tas ievainojamības, piemēram, PHP2Shell, var aizvērt ātri un pierādāmi.

## No kā PHP sastāv serverī

PHP nav viena programma. Tipiskā Linux serverī ir vairāki varianti, katrs pieslēgts ar servera saskarni (SAPI):

| Variants | Tipisks nosaukums | Kam |
|---|---|---|
| Komandrinda (CLI) | `php`, `php8.3` | cron uzdevumi, Composer, uzturēšanas skripti |
| PHP-FPM | `php-fpm`, `php-fpm8.3` | tīmekļa pieprasījumi aiz Nginx vai Apache |
| Apache modulis | `mod_php`, `libphp` | tīmekļa pieprasījumi tieši Apache procesā |
| CGI | `php-cgi` | vecākas uzbūves |

Katram variantam var būt cita versija un cits php.ini. Daudzos serveros paralēli darbojas arī vairākas PHP versijas, piemēram, 8.2 un 8.4. Atjauninājumā katra jāaplūko atsevišķi. Kā saskarnes darbojas, izskaidro [PHP-FPM izskaidrots](https://phpsos.de/lv/php/php-fpm-erklaert/).

Kuru variantu jūsu vietnes patiešām apkalpo, noskaidrojat pēc darbojošamies procesiem un tīmekļa servera konfigurācijas:

```bash
ps -eo pid,user,lstart,cmd | grep -E "php|httpd|apache2" | grep -v grep
apachectl -M 2>/dev/null | grep -i php     # vai Apache ielādē PHP moduli?
ls /run/php/ 2>/dev/null                    # FPM sockets, bieži katrai versijai un pūlam
```

Sleja ar startēšanas laiku vēlāk pārstartēšanā ir svarīga: visiem PHP procesiem jābūt startētiem pēc atjauninājuma brīža. Ja procesi darbojas ar dažādiem lietotājiem, tas norāda uz atsevišķiem pūliem, kas ir labi. Ja Apache parādās PHP modulis, kaut gan visām vietnēm jādarbojas caur FPM, tā ir norāde uz mantotu slogu, kas jānoņem. Hostinga saskarnēm, piemēram, Plesk vai cPanel, spēkā tas pats princips, tikai saskarne rāda versijas un apstrādātājus (handler) katrai vietnei; noteicošais tomēr ir tas, kas patiešām darbojas kā process.

## Svarīgākās komandas administratoriem

```bash
php -v                    # komandrindas versija
php --ini                 # ielādētais php.ini un papildus nolasītie direktoriji
php --ini=diff            # no PHP 8.5: novirzes no noklusējuma
php -m                    # iekompilētie un ielādētie moduļi
php --ri session          # paplašinājuma iestatījumi
php -l datei.php          # sintakses pārbaude bez izpildes
php-fpm8.3 -v             # FPM binārfaila versija (nosaukums atkarībā no distributīva)
php-fpm8.3 -t             # FPM konfigurācijas pārbaude bez pārstartēšanas
systemctl status php8.3-fpm
```

Divas norādes no rokasgrāmatas: `php -l` atrod sintakses kļūdas, bet ne kļūdas, kas rodas tikai izpildes laikā. Un `php -i` izsauc `phpinfo()`; izvade nepieder publiskiem failiem tīmekļa direktorijā.

## Kā darbojas PHP iestatījumi

Iestatījumu var iestatīt vairākās vietās. Kas kur ko drīkst mainīt, nosaka katras direktīvas maiņas režīms:

1. **php.ini un conf.d:** pamata konfigurācija katram variantam, nolasīta startā.
2. **FPM pūls:** `php_value` un `php_admin_value` katram pūlam. Ar `php_admin_value` iestatītas vērtības lietojumprogramma saskaņā ar rokasgrāmatu ar `ini_set()` pārrakstīt nevar.
3. **Direktorija līmenis:** `.user.ini` FPM gadījumā vai `.htaccess` mod_php gadījumā, tikai direktīvām režīmā `INI_PERDIR` vai `INI_ALL`.
4. **Lietojumprogramma:** `ini_set()` izpildes laikā, tikai direktīvām režīmā `INI_ALL`.

Piemērs: `memory_limit` ir režīmā `INI_ALL`, tātad lietojumprogramma to var mainīt. `post_max_size` ir `INI_PERDIR`, un to ar `ini_set()` mainīt nevar. Tāpēc php.net PHP2Shell pagaidu pasākumos prasa vērtības iestatīt tā, lai lietojumprogrammas tās nevarētu pārrakstīt. Detaļas par līmeņiem izskaidro [php.ini izskaidrots](https://phpsos.de/lv/php/php-ini-erklaert/).

## PHP-FPM pūli īsumā

Pūls ir darbprocesu grupa ar savu lietotāju, savu sockets un saviem iestatījumiem. Svarīgākās direktīvas saskaņā ar rokasgrāmatu:

```ini
[shop]
user = shop
group = shop
listen = /run/php/shop.sock
pm = dynamic                 ; static, dynamic vai ondemand
pm.max_children = 20         ; ne vairāk kā 20 vienlaicīgu pieprasījumu
pm.max_requests = 500        ; darbprocesu atjaunot pēc 500 pieprasījumiem
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/shop-slow.log
php_admin_value[error_log] = /var/log/php-fpm/shop-error.log
php_admin_flag[log_errors] = on
```

Atsevišķs pūls katrai vietnei ar savu lietotāju nošķir vietnes citu no citas. `security.limit_extensions` pēc noklusējuma ir `.php .phar` un neļauj FPM izpildīt citus faila paplašinājumus kā PHP. `clear_env` pēc noklusējuma ir ieslēgts un notur vides mainīgos prom no darbprocesa.

## Žurnāli: kur administratoriem skatīties

PHP kļūdas raksta mērķī, kas noteikts ar `error_log`, PHP-FPM papildus savā žurnālā un lēniem pieprasījumiem slowlog ar backtrace. Tam pievienojas tīmekļa servera piekļuves un kļūdu žurnāli. Sekojiet, lai produkcijā `display_errors` būtu izslēgts un `log_errors` ieslēgts: kļūdām jābūt žurnālā, nevis tīmekļa lapā. Žurnāliem jābūt arī rotētiem un glabātiem noteiktu laiku, lai tie nopietnā gadījumā vēl būtu. Pēc PHP2Shell speciālistu prese iesaka glabāt servera žurnālus no 20.10.2026. Spēcīga brīdinājuma pazīme ir PHP-FPM vai tīmekļa servera process, kas startē shell; kā to atpazīt, rakstīts sadaļā [Brīdinājuma pazīme: tīmekļa serveris startē shell](https://phpsos.de/lv/blog/webserver-startet-shell/).

## Administratoru pārbaudes saraksts pēc PHP2Shell

1. Uzskaitīt visus PHP variantus un versijas serverī, arī neizmantotos.
2. Pārbaudīt pakotņu stāvokli; distributīva backport gadījumā changelog pārmeklēt uz CVE-2026-109618 un CVE-2026-109619.
3. Atjaunināt uz 8.5.12, 8.4.27, 8.3.36 vai 8.2.35 vai apstiprināto backport.
4. Pārstartēt PHP-FPM, Apache un LiteSpeed un pārbaudīt procesu startēšanas laikus.
5. Pretpārbaude ar `php -r 'var_dump(ini_get("memory_hard_limit_percent"));'`; `bool(false)` saskaņā ar rokasgrāmatu nozīmē skartu versiju.
6. Saglabāt žurnālus un pārbaudīt uz neparastām pazīmēm.

Kā versiju un ielāpu stāvokli pierādīt uzticami, apraksta [PHP versijas un ielāpu stāvokļa pareiza pārbaude](https://phpsos.de/lv/php2shell/php-version-pruefen/).

## Kā PHP SOS palīdz konkrēti?

[Drošības uzturēšanas līgumā](https://phpsos.de/lv/leistungen/security-wartungsvertrag/) mēs kopā ar jūsu komandu uzņemamies PHP pamatkopšanu:

- **Inventārs:** visi PHP varianti, versijas, pūli un konfigurācijas vietas katrā serverī.
- **Konfigurācija:** drošībai nozīmīgas vērtības iestatītas ar `php_admin_value`, pūli katrai vietnei nošķirti.
- **Atjauninājumi:** ieviešana, pārstartēšana, kontrole un dokumentēšana pie katra drošības izlaiduma.
- **Zināšanu nodošana:** mēs jūsu administratoriem izskaidrojam, ko esam mainījuši un kāpēc.


## Biežāk uzdotie jautājumi

**Kāpēc php -v rāda citu versiju nekā vietne?**  
Komandrinda, PHP-FPM un Apache modulis ir atsevišķas programmas ar savu versiju un savu php.ini. php -v rāda tikai komandrindu. Vietnei svarīga ir tā binārfaila versija, kas patiešām apstrādā pieprasījumus.

**Kāds php.ini darbojas manā serverī?**  
To komandrindai rāda php --ini. PHP-FPM parasti ir savs php.ini un papildu pūla faili. Kopš PHP 8.5 php --ini=diff rāda, kuras vērtības atšķiras no noklusējuma.

**Kāda ir atšķirība starp php_value un php_admin_value?**  
Abi iestata iestatījumus FPM pūlā. Vērtības ar php_admin_value lietojumprogramma saskaņā ar rokasgrāmatu ar ini_set() pārrakstīt nevar. Drošībai nozīmīgiem iestatījumiem tāpēc pareizā izvēle ir php_admin_value.

**Vai pietiek ar atjauninājumu bez pārstartēšanas?**  
Nē. Darbojošies PHP procesi atmiņā patur veco kodu. Pēc atjauninājuma jāpārstartē PHP-FPM, Apache ar mod_php vai LiteSpeed, citādi turpina darboties ievainojamā versija.

## Avoti

- [PHP rokasgrāmata: komandrindas opcijas](https://www.php.net/manual/en/features.commandline.options.php)
- [PHP rokasgrāmata: FPM konfigurācija](https://www.php.net/manual/en/install.fpm.configuration.php)
- [PHP rokasgrāmata: Core iestatījumi](https://www.php.net/manual/en/ini.core.php)
- [php.net: drošības paziņojumi](https://www.php.net/)
