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 →

Córas cineálacha PHP

Tá PHP clóscríofa go dinimiciúil, ach ó PHP 7 i leith tá córas cineálacha níos déine ag fás ann. Seo duit na cineálacha, na leaganacha is tábhachtaí agus cén fáth a seachnaíonn comparáid dhocht earráidí slándála.

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

Go achomair: Tá PHP clóscríofa go dinimiciúil: ní shocraítear cineál luacha ach le linn an ama rite, agus gan treoracha breise athraíonn PHP luachanna go huathoibríoch de réir mar is gá. Ó PHP 7 i leith, áfach, is féidir cineálacha a chur le paraiméadair, le luachanna fillte agus le airíonna, agus déanann declare(strict_types=1) an tseiceáil dian. An té a bhfuil na rialacha ar eolas aige agus a úsáideann comparáidí docht le ===, seachnaíonn sé aicme iomlán d'earráidí loighice agus slándála.

Clóscríofa go dinimiciúil, ach ní gan chineál

I PHP ní gá cineál a shonrú le $preis = 19.90;. Aithníonn PHP gur uimhir snámhphointe atá ann. Má nascadh an luach ar ball le teaghrán, athraíonn PHP é. Tugtar type juggling ar an iompar seo, is é sin athrú cineáil uathoibríoch. Éascaíonn sé an tús, ach is féidir leis torthaí ionadh a thabhairt.

Do lucht cinnteoireachta tá sé seo ábhartha toisc go raibh go leor seanfheidhmchlár PHP scríofa gan cineálacha. Is deacra cód den sórt sin a sheiceáil agus a nuachóiriú. Úsáideann tionscadail níos nuaí cineálacha go comhsheasmhach, rud a fhágann go bhfeictear earráidí níos luaithe agus a chuireann anailís statach le huirlisí ar nós PHPStan nó Psalm i bhfeidhm i ndáiríre.

Cineálacha PHP i mbeagán focal

Luann lámhleabhar PHP naoi gcineál inmheánacha is féidir a bheith ag aon slonn. De ghnáth roinntear iad i dtrí ghrúpa:

Grúpa Cineálacha Sampla
Cineálacha scalacha bool, int, float, string true, 42, 3.5, "Text"
Cineálacha comhshuite array, object, callable [1, 2], new DateTime()
Cineálacha speisialta null, resource null, comhad oscailte

Chun cineálacha a sheiceáil molann an lámhleabhar na feidhmeanna is_*() mar is_int(). Chun iniúchadh a dhéanamh oireann get_debug_type(), a thugann ainmneacha cineáil coitianta ó PHP 8.0.0 i leith, agus tugann an gettype() is sine, mar shampla, "integer" agus "double" ar ais.

Taobh leis an athrú uathoibríoch tá an t-athrú sainráite ann: le cast mar (int) $wert nó le settype() socraíonn an cód féin an cineál ba cheart a bheith ag luach. Tá sé sin coitianta le ionchur ó fhoirmeacha, mar is teaghrán nó eagar an chéad rud a thagann isteach trí $_GET nó $_POST. Ní sheiceálann cast, áfach, an raibh ciall leis an luach: de "abc" déantar 0 go ciúin. Dá bhrí sin is minic gurb é seiceáil cheart le filter_var() an rogha níos fearr d'ionchuir.

Is cineálacha iad aicmí agus comhéadain i PHP freisin. Is féidir le feidhm a éileamh, mar sin, go mbeadh paraiméadar ina oibiacht d'aicme áirithe nó go gcomhlíonfadh sé comhéadan áirithe. Míníonn an leathanach Oibiachtdhírithe i PHP conas a oibríonn aicmí, comhéadain agus enums le chéile.

Dearbhuithe cineáil: ó PHP 7.1 go 8.3

Socraíonn dearbhuithe cineáil na luachanna a nglacann feidhm leo agus a thugann sí ar ais. D'fhás an córas cineálacha thar go leor leaganacha. De réir loga athruithe an lámhleabhair cuireadh na féidearthachtaí seo leis, i measc nithe eile:

Leagan Nua
7.1.0 cineálacha nullable (?int), void, iterable
7.2.0 object
7.4.0 airíonna aicme clóscríofa
8.0.0 cineálacha union (roinnt cineálacha ceadaithe in aon sonrú amháin), mixed, cineál fillte static
8.1.0 cineálacha intersection (A&B), cineál fillte never
8.2.0 cineálacha DNF, cineál litreach true, null agus false mar chineálacha neamhspleácha
8.3.0 tairisigh aicme, comhéadain, tréithe agus enum clóscríofa

Seasann DNF do foirm normalta dhíthiúil agus ceadaíonn sé teaglaim ar nós (A&B)|null. An té a bhfuil leaganacha PHP á bplé aige, léiríonn an tábla seo dó freisin cé na gnéithe teanga a dteastaíonn feidhmchlár uathu.

strict_types: athrú nó TypeError

Gan sonrú breise oibríonn PHP sa mhodh athraithe. Glacann feidhm le paraiméadair int le 1.5 freisin ansin agus déanann sí 1 de; ó PHP 8.1 i leith tá an t-athrú seo le cailliúint marcáilte mar imithe i léig. Le declare(strict_types=1) ag tús an chomhaid caitheann PHP TypeError ina ionad.

<?php
declare(strict_types=1);

function summe(int $a, int $b): int
{
    return $a + $b;
}

echo summe(1, 2);      // 3
echo summe(1.5, 2.5);  // TypeError, in ionad 3 go ciúin

Tá dhá mhionsonra tábhachtach. Ar an gcéad dul síos, baineann strict_types le glaonna ón gcomhad ina bhfuil sé, ní leis na feidhmeanna a shainmhínítear ann. Má ghlaonn comhad gan strict_types an fheidhm chéanna, déantar athrú. Ar an dara dul síos, tá slánuimhir ceadaithe fiú sa mhodh dian nuair a bhíonn uimhir snámhphointe ag teastáil.

Comparáidí scaoilte agus docht

Déanann an t-oibreoir == comparáid tar éis athraithe cineáil; déanann === comparáid ar luach agus ar chineál gan athrú. Molann an lámhleabhar === agus !== sa chuid is mó de na cásanna, mar nach bhfuil rialacha an athraithe soiléir i gcónaí.

<?php
var_dump(0 == "a");    // PHP 7: true,  PHP 8: false
var_dump("1" == "01"); // true, is teaghráin uimhriúla iad araon
var_dump("1" === "01");// false, an cineál céanna, ach teaghrán eile
var_dump(1 == true);   // true
var_dump(1 === true);  // false

Le PHP 8.0 rinneadh comparáidí idir uimhreacha agus teaghráin neamh-uimhriúla níos réasúnta. D'fhéadfadh seanfheidhmchláir iompar difriúil a bheith acu tar éis an uasghráidithe, mar shampla i mbloic switch. Déanann an slonn match, a tugadh isteach le PHP 8.0 freisin, comparáid dhocht i gcónaí. Déanann an t-alt Type juggling: comparáidí scaoilte mar riosca slándála cur síos ar an gcaoi a gcruthaíonn comparáidí scaoilte leochaileachtaí slándála, mar shampla i seiceálacha comharthaí nó pasfhocal.

Cineálacha, uasghráduithe agus PHP2Shell

Déanann córas cineálacha dian cód an fheidhmchláir níos láidre, ach ní chosnaíonn sé i gcoinne earráidí san ateangaire féin. Tá leochaileachtaí PHP2Shell CVE-2026-109618 agus CVE-2026-109619 i mbainistiú cuimhne agus iarratas PHP. Tá siad deisithe i PHP 8.5.12, 8.4.27, 8.3.36 agus 8.2.35; ina dhiaidh sin ní mór gach próiseas PHP a atosú.

Ach tá ról ag an gcóras cineálacha mar sin féin, is é sin le linn an uasghráidithe. Ní fhaigheann feidhmchláir atá fós ar PHP 8.1 nó níos sine nuashonruithe oifigiúla a thuilleadh ó thionscadal PHP. Is féidir cód a bhfuil cineálacha maithe air a ardú go leagan tacaithe i bhfad níos éasca, mar aimsíonn uirlisí neamh-chomhoiriúnachtaí go luath. I gcás seanthionscadal tacaíonn ár n-aistriú go leagan PHP tacaithe leat.

Leid

Cumasaigh strict_types céim ar chéim i gcomhaid nua agus i gcomhaid athchóirithe. Ar an mbealach sin fásann sábháilteacht cineáil gan go mbriseann seanchód ar an toirt.

Conas a chabhraíonn PHP SOS go praiticiúil?

  • Seiceálaimid an leagan PHP is lú a theastaíonn ó d'fheidhmchlár agus déanaimid comparáid idir sin agus na leaganacha deisithe.
  • Ritheann muid anailís statach ar an gcód agus marcálaimid áiteanna ina bhfuil comparáidí scaoilte i seiceálacha a bhaineann le slándáil.
  • Pleanálaimid uasghráduithe ionas go ndéantar rialacha comparáide athraithe a thástáil roimh ré.
  • Suiteálaimid an nuashonrú PHP, atosaímid gach oibrí agus déanaimid an staid a dhoiciméadú.

Ceisteanna coitianta

An bhfuil PHP clóscríofa go láidir nó go lag?

Tá PHP clóscríofa go dinimiciúil: ní shocraítear cineál athróige ach le linn an ama rite. Gan strict_types athraíonn PHP luachanna de réir mar is gá. Le dearbhuithe cineáil agus strict_types, áfach, is féidir an cód a dhéanamh an-dian.

Cad a dhéanann declare(strict_types=1)?

Múchann sé athrú uathoibríoch luachanna scalacha do ghlaonna ón gcomhad lena mbaineann. Mura n-oireann luach don chineál dearbhaithe, caitheann PHP TypeError. Is é an t-aon eisceacht slánuimhir nuair a bhíonn uimhir snámhphointe ag teastáil.

Cén fáth a bhfuil 0 == "a" bréagach i PHP 8, ach fíor i PHP 7?

Go PHP 7, athraíodh teaghrán neamh-uimhriúil ina uimhir nuair a cuireadh i gcomparáid le huimhir é, agus rinneadh 0 de "a". Ó PHP 8.0 i leith ní dhéanann PHP comparáid uimhriúil sa chás seo a thuilleadh agus is false an toradh.

An gcosnaíonn cineálacha i gcoinne leochaileachtaí slándála i PHP féin?

Ní chosnaíonn. Cuireann cineálacha cosc ar earráidí i gcód do fheidhmchláir. Ní dhúntar leochaileachtaí san ateangaire ar nós PHP2Shell ach le nuashonrú PHP. Tá leaganacha reatha PHP riachtanach d'fheidhmeanna cineáil nua-aimseartha, áfach, agus dá bhrí sin is cúis mhaith iad le huasghrádú.

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