An cás reatha: PHP2Shell. Ceadaíonn dhá leochaileacht chriticiúla PHP (CVSS 9.2) cód mailíseach gan logáil isteach. Paistí ar fáil ón 21 Deireadh Fómhair 2026.Cad atá le déanamh anois →

Bainistiú cuimhne i PHP: áireamh tagartha agus bailiú truflais

Bainistíonn PHP cuimhne le háireamh tagartha agus le bailitheoir truflais do thimthriallta. Míníonn an leathanach seo an mheicnic, na feidhmeanna tomhais is tábhachtaí agus cén fáth a mbaineann an dá leochaileacht PHP2Shell le staideanna cuimhne.

Staid Am léitheoireachta: 6 nóim.Eolas PHP

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
$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
$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 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 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 conas é sin a dhéanamh le systemd.

; 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.
  • 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í

Teagmháil láithreach

Cuireann gach uair an chloig leis. Scríobh chugainn anois.

Déan cur síos gearr ar an gcóras, leagan PHP agus an rud a thug tú faoi deara. Cuirfimid scéala chugat, soiléireoimid an cás agus oibreoimid go cianda go dtí go mbeidh an teagmhas dúnta agus doiciméadaithe.

Cabhair láithreach