# php.ini izskaidrots: uzbūve, līmeņi un prioritāte

> php.ini izskaidrots: kur PHP meklē konfigurāciju, kādi ir līmeņi, ko nozīmē INI_SYSTEM un INI_PERDIR un kura vērtība galu galā ir spēkā.

Avots: https://phpsos.de/lv/php/php-ini-erklaert/  
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.ini ir PHP centrālais konfigurācijas fails. PHP to nolasa startējot, servera moduļiem vienreiz, CGI un CLI katrā izsaukumā. Klāt nāk papildu faili no skenēšanas direktorija, iestatījumi FPM pūlā vai Apache, `.htaccess` vai `.user.ini` un `ini_set()` kodā. Kurš līmenis vērtību drīkst mainīt, nosaka tās izmaiņu režīms, piemēram, `INI_SYSTEM` vai `INI_PERDIR`. Vērtības ar `php_admin_value` lietojumprogramma vairs nevar pārrakstīt.

## Kas ir php.ini?

php.ini ir teksta fails ar ierakstiem pēc parauga `name = wert`. Tas nosaka, kā PHP uzvedas: cik daudz atmiņas skripts drīkst izmantot, vai kļūdas parādās pārlūkprogrammā, kā darbojas sesijas un kuri paplašinājumi tiek ielādēti. Komentāri sākas ar semikolu.

Saskaņā ar PHP rokasgrāmatu fails tiek nolasīts PHP startēšanas laikā. Servera moduļu, piemēram, mod_php, gadījumā tas notiek tikai vienreiz, startējot tīmekļa serveri, CGI un CLI katrā izsaukumā. PHP-FPM savu konfigurāciju nolasa startējot un pakalpojuma pārlādes laikā. Izmaiņa bez pārstartēšanas vai pārlādes tāpēc parasti nedarbojas.

Kopš PHP 8.3 saskaņā ar rokasgrāmatu ieraksts var atsaukties uz vides mainīgo ar aizstājējvērtību:

```ini
memory_limit = ${PHP_MEMORY_LIMIT}
max_execution_time = ${PHP_MAX_EXECUTION_TIME:-30}
```

## Kur PHP meklē php.ini?

Rokasgrāmata apraksta stingru secību. Vispirms spēkā ir skaidri norādīts ceļš, piemēram, `PHPIniDir` Apache vai opcija `-c` CGI un CLI gadījumā. Pretējā gadījumā PHP veido meklēšanas ceļu no:

1. vides mainīgā `PHPRC`,
2. sistēmā Windows reģistra ieraksta `IniFilePath`,
3. pašreizējā darba direktorija, izņemot SAPI, kas to izslēdz, piemēram, CLI,
4. PHP binārā faila vai moduļa direktorija,
5. kompilēšanas laikā iestatītā ceļa `--with-config-file-path`.

Šajā meklēšanas ceļā PHP vispirms meklē failu `php-SAPI.ini`, piemēram, `php-cli.ini`, un tikai pēc tam `php.ini`. Pēc tam PHP alfabētiskā secībā nolasa visus `.ini` failus no skenēšanas direktorija, kas noteikts ar `PHP_INI_SCAN_DIR` vai kompilēšanas laikā ar `--with-config-file-scan-dir`. Kuri faili ielādēti, rāda `php --ini` vai funkcija `php_ini_scanned_files()`.

```bash
php --ini
php -r 'var_dump(php_ini_loaded_file(), php_ini_scanned_files());'
```

Abas komandas rāda komandrindas stāvokli. Vietnei var būt spēkā cits fails, jo katrai SAPI var būt sava konfigurācija; vairāk sadaļā [SAPI izskaidrota](https://phpsos.de/lv/php/sapi-erklaert/).

## Izmaiņu režīmi: kam kuru vērtību drīkst iestatīt?

Ne katru iestatījumu drīkst iestatīt visur. Rokasgrāmata katrai direktīvai piešķir izmaiņu režīmu:

| Režīms | Kur vērtību drīkst iestatīt |
|---|---|
| `INI_USER` | skriptos ar `ini_set()`, Windows reģistrā un failā `.user.ini` |
| `INI_PERDIR` | php.ini, `.htaccess`, `httpd.conf` vai `.user.ini` |
| `INI_SYSTEM` | tikai php.ini vai `httpd.conf` |
| `INI_ALL` | visur |

Piemēri no rokasgrāmatas: `memory_limit` ir režīms `INI_ALL` un noklusējums `128M`, `post_max_size` ir `INI_PERDIR` un noklusējums `8M`, `upload_max_filesize` ir `INI_PERDIR` un noklusējums `2M`. `expose_php` drīkst atrasties tikai php.ini.

`.user.ini` faili saskaņā ar rokasgrāmatu tiek nolasīti tikai CGI un FastCGI SAPI, tātad arī PHP-FPM. PHP tos meklē no skripta direktorija uz augšu līdz Document Root un pēc noklusējuma nolasa no jauna ne biežāk kā ik pēc 300 sekundēm (`user_ini.cache_ttl`). Ar mod_php šo lomu pilda `.htaccess`.

## Kura vērtība galu galā ir spēkā? Līmeņi pēc prioritātes

Vienkāršoti: jo vēlāk līmenis iedarbojas, jo lielāka iespēja, ka tā vērtība uzvar, ja izmaiņu režīms to atļauj.

1. attiecīgās SAPI **php.ini**
2. **papildu faili** no skenēšanas direktorija, alfabētiski
3. **servera konfigurācija:** FPM pūls ar `php_value` vai `php_admin_value`, Apache VirtualHost
4. **direktorija līmenis:** `.htaccess` ar mod_php, `.user.ini` ar FPM un CGI
5. **izpildes laiks:** `ini_set()` lietojumprogrammas kodā

Izņēmums ir izšķirošs: vērtības ar `php_admin_value` vai `php_admin_flag` saskaņā ar rokasgrāmatu nevar pārrakstīt ar `ini_set()`. Tā administratori bloķē drošībai svarīgus iestatījumus pret lietojumprogrammu. Detalizēti tas aprakstīts sadaļā [php_admin_value: iestatījumu bloķēšana pret pārrakstīšanu](https://phpsos.de/lv/blog/php-admin-value-sperren/).

## php.ini pēc PHP2Shell: kas ir mainījies

php.net pagaidu pasākumi pret PHP2Shell gandrīz visi ir INI iestatījumi: `memory_limit=-1` iestatīts bloķēti pret pārrakstīšanu, ierobežots `post_max_size`, `session.upload_progress.enabled=0` un PHP 8.5 `fatal_error_backtraces=0`. php.net uzsver, ka `session.upload_progress.enabled` nevajadzētu iestatīt ar `ini_set()` vai `.user.ini`, bet php.ini, FPM pūlā vai servera konfigurācijā, ar sekojošu visu darbprocesu pārstartēšanu. Pilns saraksts atrodas sadaļā [Tūlītēji pasākumi, ja vēl nevarat ielāpot](https://phpsos.de/lv/php2shell/sofortmassnahmen-ohne-patch/).

Ar labotajām versijām 8.5.12, 8.4.27, 8.3.36 un 8.2.35 saskaņā ar rokasgrāmatu mainījies arī `memory_limit`: tagad tā ir mīkstā robeža. Jaunais iestatījums `memory_hard_limit_percent` nosaka cieto robežu. Bez savas vērtības tā ir divkāršs `memory_limit`, ja vairāk par `1G`, tad vērtība plus `1G`. Ja tā tiek pārsniegta, process nekavējoties beidzas ar izejas statusu 137. Kā abas robežas izvēlēties saprātīgi, izskaidro [memory_limit pareiza iestatīšana](https://phpsos.de/lv/blog/memory-limit-richtig-setzen/).

> **Padoms:**
> Saskaņā ar rokasgrāmatu ir spēkā: ja PHP versija `memory_hard_limit_percent` nepazīst, to skar CVE-2026-109618 un CVE-2026-109619. Distributīvos ar backport labojumiem stāvokli papildus pierāda pakotnes changelog.

## Kā PHP SOS palīdz konkrēti?

- **Noteikt spēkā esošās vērtības:** Mēs katrai SAPI nolasām, kuri faili tiek ielādēti un kura vērtība galu galā ir spēkā.
- **Sakopt līmeņus:** Mēs noņemam pretrunīgus ierakstus no paneļiem, pūliem, `.htaccess` un `.user.ini`.
- **Iestatīt bloķējumus:** [Servera nostiprināšanas](https://phpsos.de/lv/leistungen/server-haertung/) ietvaros mēs drošībai svarīgas vērtības nofiksējam ar `php_admin_value`.
- **Pierādīt:** Mēs dokumentējam iestatījumus un pārstartēšanu, lai stāvokli vēlāk varētu pierādīt.


## Biežāk uzdotie jautājumi

**Kur atrodas php.ini?**  
Tas atkarīgs no operētājsistēmas, pakotnes un SAPI. Debian un Ubuntu katrai versijai un SAPI ir savas mapes, piemēram, /etc/php/8.3/fpm/php.ini un /etc/php/8.3/cli/php.ini. Komandrindā php --ini rāda ielādētos failus, vietnei palīdz php_ini_loaded_file() īslaicīgā pārbaudes failā.

**Kādā secībā tiek nolasīti faili conf.d mapē?**  
Saskaņā ar PHP rokasgrāmatu PHP nolasa visus failus ar paplašinājumu .ini skenēšanas direktorijā alfabētiskā secībā. Vēlāki faili pārraksta agrāko vērtības. Tāpēc daudzu failu nosaukumos ir skaitļi, piemēram, 20- vai 99-.

**Kāpēc manas php.ini izmaiņas nedarbojas?**  
Biežākie iemesli: mainīts citas SAPI fails, pakalpojums nav pārstartēts, vērtību pārraksta iestatījums FPM pūlā, Apache konfigurācijā vai failā .user.ini, vai arī hostinga panelis nākamajā saglabāšanā failu uzraksta no jauna.

**Kas ir memory_hard_limit_percent?**  
Jauns iestatījums, kas saskaņā ar PHP rokasgrāmatu ieviests ar drošības izlaidumiem 2026. gada 21. oktobrī. Tas nosaka cieto atmiņas robežu kā memory_limit procentuālu daļu. Rokasgrāmata norāda, ka PHP versija, kas šo iestatījumu nepazīst, ir PHP2Shell ievainojamību skarta.

## Avoti

- [PHP rokasgrāmata: konfigurācijas fails](https://www.php.net/manual/en/configuration.file.php)
- [PHP rokasgrāmata: INI izmaiņu režīmi](https://www.php.net/manual/en/configuration.changes.modes.php)
- [PHP rokasgrāmata: .user.ini faili](https://www.php.net/manual/en/configuration.file.per-user.php)
- [PHP rokasgrāmata: kodola iestatījumi](https://www.php.net/manual/en/ini.core.php)
