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 →

Spásanna ainmneacha agus uathluchtú (PSR-4)

Cuireann spásanna ainmneacha cód PHP in ord, luchtaíonn uathluchtú aicmí díreach nuair a theastaíonn siad. Seo duit conas a mhapálann PSR-4 ainmneacha aicmí ar chomhaid agus cén fáth a gcaithfear an t-uathluchtóir a sheiceáil tar éis teagmhais.

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

Go achomair: Is cosúil le fillteáin d'ainmneacha aicmí iad spásanna ainmneacha i PHP: is féidir le App\Rechnung\Pdf agus Bibliothek\Pdf a bheith ann taobh le taobh gan cur isteach ar a chéile. Cinntíonn uathluchtú nach luchtaíonn PHP aicme go dtí go mbíonn sí ag teastáil den chéad uair. Socraíonn an caighdeán PSR-4 conas a dhéantar cosán comhaid d'ainm aicme; ginneann Composer an t-uathluchtóir cuí ina dhiaidh sin. Toisc go ritheann an t-uathluchtóir seo le gach iarratas, is ar cheann de na chéad rudaí a sheiceáiltear é tar éis teagmhais slándála.

Cén fáth a dteastaíonn spásanna ainmneacha ó PHP

Tá spásanna ainmneacha ann ó PHP 5.3.0 i leith. Roimhe sin roinn gach aicme agus feidhm spás ainmneacha domhanda amháin. Má thug dhá leabharlann Logger orthu, tháinig briseadh. Chabhraigh forbróirí leo féin le hainmneacha fada ar nós Firma_Modul_Unterbereich_Logger.

Luann lámhleabhar PHP dhá fhadhb a réitíonn spásanna ainmneacha: coinbhleachtaí ainmneacha idir cód féin, aicmí inmheánacha PHP agus leabharlanna tríú páirtí, chomh maith le hainmneacha ródhéanacha nár cruthaíodh ach chun na coinbhleachtaí sin a sheachaint. Do lucht cinnteoireachta ciallaíonn sé seo: ní raibh sé praiticiúil go leor pacáistí coimhthíocha a chomhcheangal i dtionscadal amháin, mar is gnách inniu le Composer, ach amháin le spásanna ainmneacha.

Spásanna ainmneacha sa chleachtas: namespace, use, ailiasanna

Dearbhaíonn comhad a spás ainmneacha sa chéad ordú. Le use tugtar aicmí isteach ó spásanna ainmneacha eile, má theastaíonn faoi ainm níos giorra.

<?php
declare(strict_types=1);

namespace App\Rechnung;

use App\Kunde\Kunde;
use Psr\Log\LoggerInterface as Log;

final class PdfErzeuger
{
    public function __construct(private Log $log) {}

    public function erzeugen(Kunde $kunde): string
    {
        $this->log->info('PDF erzeugt', ['kunde' => $kunde->id]);
        return \sprintf('Rechnung für %s', $kunde->name);
    }
}

Is é ainm iomlán na haicme seo App\Rechnung\PdfErzeuger. Tagraíonn an cúl-slais tosaigh ag \sprintf go sainráite don fheidhm dhomhanda PHP.

Uathluchtú: aicmí a luchtú de réir mar is gá

Gan uathluchtú bheadh ar gach script na comhaid ar fad a theastaíonn a áireamh le require. Le spl_autoload_register() cláraítear feidhm ina ionad a ghlaonn PHP a luaithe a úsáidtear aicme anaithnid, comhéadan, tréith nó enum. Faigheann sí ainm na haicme agus luchtaíonn sí an comhad cuí.

<?php
spl_autoload_register(function (string $klasse): void {
    $praefix = 'App\\';
    $basis   = __DIR__ . '/src/';

    if (!str_starts_with($klasse, $praefix)) {
        return; // níl sé freagrach, tá an chéad uathluchtóir eile i ndiaidh
    }
    $datei = $basis . str_replace('\\', '/', substr($klasse, strlen($praefix))) . '.php';
    if (is_file($datei)) {
        require $datei;
    }
});

Is féidir spl_autoload_register() a ghlaoch arís agus arís eile. Fiafraíonn PHP de na huathluchtóirí cláraithe ceann i ndiaidh a chéile ansin go dtí go luchtaíonn ceann acu an aicme. Sa chleachtas bíonn roinnt acu go minic ag feidhmchláir mhóra: uathluchtóir Composer do leabharlanna, ceann ar leith den CMS agus tuilleadh ó bhreiseáin nó ó mhodúil. Do riarthóirí ciallaíonn sé seo: an cód a luchtaítear i ndáiríre le hiarratas, éiríonn sé as idirghníomhú na n-uathluchtóirí seo go léir, ní as struchtúr na bhfillteán amháin.

Comhairlíonn an lámhleabhar go láidir gan eisceachtaí a chaitheamh in uathluchtóir; toirmisceann PSR-4 go sainráite é. Marcáladh an fheidhm níos sine __autoload() mar imithe i léig le PHP 7.2.0 agus baineadh amach í le PHP 8.0.0.

PSR-4: ó ainm aicme go cosán comhaid

Is caighdeán den PHP-FIG é PSR-4. Tosaíonn ainm iomlán aicme le spás ainmneacha monaróra. Sanntar réimír den spás ainmneacha d'eolaire bunúsach, tugann an chuid eile den ainm fofhillteáin, agus críochnaíonn an comhad ar .php. Ní mór an cás litreach a mheaitseáil go díreach. Seo cuma an tsannta sa composer.json:

{
    "autoload": {
        "psr-4": { "App\\": "src/" }
    }
}
Ainm aicme Comhad
App\Kunde\Kunde src/Kunde/Kunde.php
App\Rechnung\PdfErzeuger src/Rechnung/PdfErzeuger.php
App\Rechnung\Pdf\Vorlage src/Rechnung/Pdf/Vorlage.php

Is tuisliú clasaiceach é an cás litreach. Ar ríomhairí forbartha le Windows nó macOS, ní dhéanann an córas comhad idirdhealú go minic idir Kunde.php agus kunde.php, ach déanann ar fhreastalaí Linux. Ansin ní aimsíonn feidhmchlár a oibríonn go háitiúil aicme ar an bhfreastalaí. Cuireann riail PSR-4, na hainmneacha a úsáid go beacht sa litriú ceart, cosc ar iontais den sórt sin le linn an tseachadta.

Taobh le psr-4, aithníonn Composer classmap do chód gan struchtúr caighdeánach agus files do chomhaid a luchtaítear le gach iarratas, mar shampla feidhmeanna cúnta. Déanann an leathanach Caighdeáin PSR cur síos ar chaighdeáin eile den PHP-FIG.

An t-uathluchtóir a bharrfheabhsú sa táirgeadh

Sa táirgeadh is fearr nach lorgaíonn an t-uathluchtóir sa chóras comhad a thuilleadh, ach go bhféachann sé suas i liosta réidh. Tairgeann Composer dhá chéim chuige sin:

  1. Athraíonn composer install --no-dev --optimize-autoloader na rialacha PSR-4 ina liosta aicmí. De réir cháipéisíocht Composer, moltar é sin don táirgeadh.
  2. Téann --classmap-authoritative níos faide: luchtaítear aicmí ón liosta amháin. Ní luchtaíonn an t-uathluchtóir comhaid nach bhfuil liostaithe ar chor ar bith ansin.
  3. Le gach seachadadh giniúntar an liosta as an nua, ionas go bhfaightear aicmí nua.

Uathluchtú agus slándáil tar éis PHP2Shell

Baineann PHP2Shell leis an ateangaire PHP, ní leis an uathluchtóir. Fanann an nuashonrú go PHP 8.5.12, 8.4.27, 8.3.36 nó 8.2.35 agus atosú gach oibrí éigeantach. Tar éis teagmhais a d'fhéadfadh a bheith ann, áfach, is fiú aird ar leith a thabhairt ar an uathluchtóir: déantar vendor/autoload.php agus na comhaid go léir a bhfuil iontráil acu faoi files a rith le gach iarratas. Oibríonn líne a cuireadh isteach ansin ar an suíomh gréasáin ar fad, gan comhad nua amhrasach a bheith san fhillteán uaslódála.

Seiceáil dá bhrí sin an bhfuil vendor agus na comhaid uathluchtaithe ag teacht leis an staid sheiceáilte ón mbainistíocht leaganacha. Tá na hailt Comhaid a athraíodh le déanaí a aimsiú agus Croíchomhaid CMS a chur i gcomparáid leis an mbunleagan úsáideach. I gcás amhrais tá vendor nua-ghinte ón gcomhad glasála níos sábháilte ná aon deisiú aonair.

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

  • Cuirimid vendor, an t-uathluchtóir agus comhaid iontrála i gcomparáid leis an staid sheiceáilte agus marcálaimid gach neamhréireacht.
  • Athchruthaímid an stoc pacáistí ón gcomhad glasála agus socraímid uathluchtóir barrfheabhsaithe.
  • Seiceálaimid nach bhfuil ach an fillteán poiblí sa Webroot agus nach bhfuil an cód foinse inrochtana go díreach trí URL.
  • I gcás ionfhabhtaithe glacaimid an glanadh orainn mar chuid de bhaint bogearraí mailíseacha agus déanaimid an toradh a dhoiciméadú.

Ceisteanna coitianta

Cathain a tháinig spásanna ainmneacha chun cinn i PHP?

Ó PHP 5.3.0 i leith. De réir an lámhleabhair, réitíonn siad dhá fhadhb: coinbhleachtaí ainmneacha idir cód féin, PHP agus leabharlanna tríú páirtí, chomh maith le hainmneacha aicmí ródhéanacha nár cruthaíodh ach chun a leithéid de choinbhleachtaí a sheachaint.

Cad é an difríocht idir PSR-0 agus PSR-4?

Mapálann an dá cheann ainmneacha aicmí ar chosáin chomhaid. Le PSR-4 ní dhéantar réimír an spáis ainmneacha a athdhéanamh sa chosán comhaid, rud a thugann eolairí níos ísle. Tá PSR-0 aicmithe mar imithe i léig ag an PHP-FIG, is é PSR-4 an caighdeán molta.

An n-oibríonn __autoload() fós?

Ní oibríonn. Marcáladh __autoload() mar imithe i léig le PHP 7.2.0 agus baineadh amach é le PHP 8.0.0. Inniu cláraítear uathluchtóirí le spl_autoload_register(), sa chleachtas den chuid is mó tríd an uathluchtóir a ghineann Composer.

An gcaithfidh mé an t-uathluchtóir a ghiniúint arís tar éis aicme nua a chruthú?

I gcás rialacha PSR-4 amháin, ní gá, de réir cháipéisíocht Composer is buntáiste de PSR-4 é sin go sonrach. An té a úsáideann liosta aicmí barrfheabhsaithe sa táirgeadh, ní mór dó é a ghiniúint arís le gach seachadadh.

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