# Bainistiú cuimhne i PHP: áireamh tagartha agus bailiú truflais

> Bainistiú cuimhne PHP go soiléir: áireamh tagartha, Copy-on-Write, timthriallta agus bailitheoir truflais, feidhmeanna tomhais agus cén fáth a dtosaíonn PHP2Shell anseo go beacht.

Foinse: https://phpsos.de/ga/php/speicherverwaltung/  
Staid: 25/10/2026  
Soláthraí: PHP SOS, Cabhair éigeandála PHP agus slándáil freastalaí. Cabhair láithreach trí WhatsApp: https://wa.me/491736494914?text=Dia%20duit%2C%20a%20PHP%20SOS%2C%20t%C3%A1%20cabhair%20de%20dh%C3%ADth%20orainn%20len%C3%A1r%20bhfreastala%C3%AD%20PHP.%20Cuideachta%3A%20%E2%80%A6%20Su%C3%ADomh%20gr%C3%A9as%C3%A1in%3A%20%E2%80%A6

**Go achomair:** Scaoileann PHP cuimhne den chuid is mó trí áireamh tagartha: tá a fhios ag gach luach cé mhéad athróg a dhíríonn air, agus scriostar é a luaithe a shroicheann an áireamhán sin nialas. Do thagairtí ciorclacha nach scaoilfí riamh ar an mbealach sin, tá bailitheoir truflais timthriallta ann. Ag deireadh gach iarratais glanann PHP gach rud a d'áitigh an t-iarratas freisin. Tosaíonn an dá leochaileacht PHP2Shell le staideanna cuimhne: le staid Out-of-Memory le linn próiseála iarratais agus le staid inmheánach a fhanann ró-fhada tar éis scaoilte.

## Conas a bhainistíonn PHP cuimhne: forbhreathnú

I dteangacha ar nós C ní mór don chlársceidealaí cuimhne a iarraidh agus a scaoileadh é féin. Cuireann PHP an obair sin de. Áitíonn gach athróg, gach eagar agus gach oibiacht cuimhne a bhainistíonn PHP trína bhainisteoir cuimhne féin. Socraíonn `memory_limit` an teorainn dó sin, `128M` de réir réamhshocraithe, de réir an lámhleabhair.

Do lucht cinnteoireachta tá pointe lárnach amháin ann: in oibriú clasaiceach le PHP-FPM nó mod_php ritheann próisis oibrí fadsaolacha a láimhseálann go leor iarratas ceann i ndiaidh a chéile. An méid a fhágann iarratas ina dhiaidh, ní mór é a ghlanadh go hiontaofa roimh an gcéad cheann eile. Go beacht ag an bpointe seo atá ceann de leochaileachtaí PHP2Shell.

## Áireamh tagartha: cuntas ar cé a úsáideann luach

Stórálann PHP gach luach i gcoimeádán, an zval mar a thugtar air. Taobh le cineál agus ábhar, tá áireamhán tagartha (`refcount`) aige de réir an lámhleabhair agus marc an bhfuil an luach mar chuid de thagairt PHP le `&` (`is_ref`).

```php
<?php
$a = str_repeat('x', 1000);  // luach amháin, refcount 1
$b = $a;                     // gan cóipeáil, refcount 2
$b .= 'y';                   // anois amháin a chóipeáiltear (Copy-on-Write)
unset($a);                   // titeann refcount an bhunaidh
// Nuair a shroicheann áireamhán 0, scaoileann PHP an chuimhne láithreach.
```

Tugtar Copy-on-Write ar an bprionsabal: ní chóipeálann PHP luach go dtí go n-athraíonn ceann de na hathróga é. Sábhálann sé sin a lán cuimhne. Is féidir áireamhán athróige a dhéanamh infheicthe leis an eisínteacht Xdebug agus an fheidhm `xdebug_debug_zval()`. Cuireann an lámhleabhar in iúl go bhféadfadh na huimhreacha cruinne a bheith éagsúil de réir leagan PHP.

## Timthriallta: nuair nach leor áireamh tagartha

Tá laige aitheanta ag áireamh tagartha. Má dhíríonn struchtúr air féin, ní thiteann a áireamhán go nialas choíche.

```php
<?php
$a = ['eins'];
$a[] = &$a;   // tá tagairt don eagar féin san eagar
unset($a);    // ní féidir le haon duine rochtain a fháil air a thuilleadh, ach fanann refcount ag 1
```

De réir an lámhleabhair tarlaíonn tagairtí ciorclacha den sórt sin go háirithe le hoibiachtaí, mar shampla i struchtúir tuismitheora-linbh nó i bparsálaithe. Tá sceitheadh aonair neamhdhíobhálach, toisc go nglanann PHP ag deireadh an iarratais. I bpróisis fhadsaolacha ar nós oibrithe scuaine nó rith mór tástála, áfach, is féidir le milliúin díobh fadhb chuimhne fhíor a chruthú.

## An bailitheoir truflais timthriallta

Ó PHP 5.3.0 i leith úsáideann PHP algartam de réir Bacon agus Rajan chun timthriallta den sórt sin a aimsiú. An bunsmaoineamh: ní féidir timthriall a bheith ann ach má thiteann áireamhán go luach níos mó ná nialas. Ní chuimhníonn PHP ach ar na luachanna sin mar fhréamhacha féideartha.

1. Téann fréamhacha féideartha i maolán. Luann an lámhleabhar 10,000 iontráil mar mhéid réamhshocraithe; taispeánann `gc_status()` an tairseach atá bailí faoi láthair sa réimse `threshold`.
2. Nuair atá an maolán lán, téann PHP trí gach luach inrochtana agus laghdaíonn sé a n-áireamháin ar thriail.
3. In dara pas, is truflais iad luachanna le háireamhán nialais; do gach ceann eile cuirtear an laghdú ar ais.
4. Baintear na fréamhacha as an maolán agus scaoiltear gach luach a aithníodh mar thruflais.

Rialaítear é trí `zend.enable_gc` (ar siúl de réir réamhshocraithe) nó ag am rite le `gc_enable()` agus `gc_disable()`. Cuireann `gc_collect_cycles()` rith i bhfeidhm de láimh agus tugann sé líon na dtimthriallta a bailíodh ar ais.

## Cuimhne a thomhas agus a bhreathnú

| Feidhm | Cuspóir |
|---|---|
| `memory_get_usage()` | cuimhne atá á húsáid faoi láthair ag an script |
| `memory_get_usage(true)` | cuimhne a chuir an bainisteoir cuimhne in áirithe ón gcóras; seiceáiltear `memory_limit` i gcoinne an luacha seo |
| `memory_get_peak_usage()` | uastairseach na cuimhne atá á húsáid |
| `gc_status()` | rite, timthriallta bailithe, tairseach, fréamhacha; ó PHP 8.3.0 amanna rite freisin |
| `gc_collect_cycles()` | bailiú timthriallta a spreagadh láithreach |
| `WeakMap` | sannadh d'oibiachtaí gan a scaoileadh a chosc, ó PHP 8.0 |

De réir an lámhleabhair ní thógann `memory_get_usage()` san áireamh ach cuimhne a iarrann PHP trína bhainisteoir cuimhne féin. An méid a fhaigheann eisínteachtaí go díreach ón gcóras oibriúcháin, tá sé in easnamh ó na huimhreacha seo. Dá bhrí sin is é an córas oibriúcháin nó an coimeádán atá freagrach as teorainn chuimhne an phróisis iomláin.

## Bainistiú cuimhne agus PHP2Shell

Treoraíonn tuairiscí an dá leochaileacht go díreach chuig an ábhar seo. Le CVE-2026-109618 is féidir le staid Out-of-Memory PHP a idirbhriseadh nuair nach bhfuil sonraí an iarratais tosaithe ach go páirteach; agus an glanadh ar siúl, d'fhéadfaí sonraí neamhbhailí a láimhseáil mar shonraí bailí ansin. Míníonn an leathanach [memory_limit agus Out-of-Memory](https://phpsos.de/ga/php/out-of-memory/) cad a tharlaíonn go hinmheánach le linn ró-ualaigh chuimhne. Le CVE-2026-109619 is féidir le staid inmheánach iarratais fanacht tar éis an chuimhne a scaoileadh agus iarratas níos déanaí san oibrí céanna í a úsáid sula gcuirtear ar ais í. Déanann an leathanach [An timthriall saoil iarratais](https://phpsos.de/ga/php/request-lebenszyklus/) cur síos ar an sreabhadh ón tús go dtí an glanadh.

Mar bheart idirthréimhseach molann php.net `memory_limit=-1` a leagan ionas nach féidir le feidhmchláir é a shárú, mar shampla le `php_admin_value` i linn FPM, agus an chuimhne a theorannú trí choimeádán nó cgroups ina ionad, ní trí `RLIMIT_AS` nó `RLIMIT_DATA`. Léiríonn an t-alt [Teorainneacha cuimhne a shocrú le systemd agus cgroups](https://phpsos.de/ga/blog/speichergrenzen-systemd-cgroups/) conas é sin a dhéanamh le systemd.

```ini
; linn FPM: beart idirthréimhseach de réir php.net, ansin gach oibrí a atosú
php_admin_value[memory_limit] = -1
```

> **Tábhachtach:**
> Gan teorainn trí choimeádán nó cgroup, is féidir le próiseas aonair an freastalaí a ghlacadh go hiomlán. Agus ní thagann aon socrú in ionad an nuashonraithe go PHP 8.5.12, 8.4.27, 8.3.36 nó 8.2.35 agus atosú gach oibrí, mar ní bhaineann ach an t-atosú seanphróisis as an gcuimhne.

## Conas a chabhraíonn PHP SOS go praiticiúil?

- Seiceálaimid na socruithe cuimhne éifeachtacha do gach linn agus an bhféadfadh feidhmchláir iad a shárú.
- Cuirimid na bearta idirthréimhseacha i bhfeidhm le teorainn chuimhne ar leibhéal coimeádáin nó cgroup agus déanaimid tástáil ar an ualach.
- Suiteálaimid an nuashonrú, atosaímid gach oibrí agus cruthaímid nach bhfuil aon seanphróisis ag rith a thuilleadh, mar chuid dár [seirbhís paistithe PHP](https://phpsos.de/ga/leistungen/php-patch-service/).
- Measaimid earráidí cuimhne agus oibrithe a stopadh sna logaí ón 20.10.2026 i leith.


## Ceisteanna coitianta

**Cad é áireamh tagartha i PHP?**  
Áiríonn PHP do gach luach cé mhéad athróg nó eilimint a thugann tagairt dó. Nuair a thiteann an áireamhán go nialas, scaoiltear an chuimhne láithreach. Ar an gcaoi sin tugtar an chuid is mó den chuimhne ar ais gan rith glantacháin ar leith.

**Cén fáth a dteastaíonn bailitheoir truflais ó PHP mar sin féin?**  
Do thimthriallta. Má thagraíonn eagar dó féin nó má bhíonn aithne ag dhá oibiacht ar a chéile, ní thiteann an áireamhán go nialas riamh, fiú mura bhfuil aon duine ag rochtain orthu a thuilleadh. Aimsíonn bailitheoir truflais na dtimthriallta struchtúir den sórt sin agus baineann sé amach iad.

**An scaoileann PHP an chuimhne ag deireadh iarratais?**  
Scaoileann, glanann PHP cuimhne a áitíonn script le linn iarratais ag deireadh an iarratais. Maidir le PHP2Shell, áfach, baineann CVE-2026-109619 go beacht leis an gcás inar féidir le staid inmheánach fanacht tar éis scaoilte agus iarratas níos déanaí san oibrí céanna í a úsáid.

**Cén fáth a molann php.net memory_limit=-1 mar bheart idirthréimhseach?**  
Tá an leochaileacht CVE-2026-109618 ceangailte le staid Out-of-Memory. Molann php.net memory_limit=-1 a leagan ionas nach féidir le feidhmchláir é a shárú, agus an chuimhne a theorannú trí choimeádán nó cgroups ina ionad sin. Ní cosaint iomlán é sin agus ní thagann sé in ionad an nuashonraithe.

## Foinsí

- [Lámhleabhar PHP: Bunghnéithe d'áireamh tagartha](https://www.php.net/manual/de/features.gc.refcounting-basics.php)
- [Lámhleabhar PHP: Timthriallta a bhailiú](https://www.php.net/manual/de/features.gc.collecting-cycles.php)
- [Lámhleabhar PHP: gc_status](https://www.php.net/manual/de/function.gc-status.php)
- [Lámhleabhar PHP: memory_get_usage](https://www.php.net/manual/en/function.memory-get-usage.php)
- [php.net: Fógraí slándála](https://www.php.net/)
