Aktuális helyzet: PHP2Shell. Két kritikus PHP-rés (CVSS 9,2) lehetővé teszi kártékony kód futtatását bejelentkezés nélkül. Javítások 2026. 10. 21. óta.Mi a teendő most →

PHP 8.0-tól 8.5-ig: a legfontosabb újdonságok

A PHP 8.0 match-étől és JIT-jétől a PHP 8.5 pipe operátoráig és URI-bővítményéig: az egyes verziók újdonságai, a frissítés buktatói, és mit hoznak a biztonságnak.

Állapot 5 perc olvasási időPHP-tudástár

Röviden: A PHP 8.0 (2020. november) elnevezett argumentumokat, attribútumokat, uniótípusokat, match-et, a nullsafe operátort és egy JIT-fordítót hozott. Ezután évente követték: a 8.1 enumokkal és Fiberekkel, a 8.2 readonly osztályokkal, a 8.3 típusos osztálykonstansokkal, a 8.4 property hookokkal és a 8.5 pipe operátorral és URI-bővítménnyel. Minden verzió régi dolgokat is elavulttá nyilvánít. Frissítéskor ezért a tesztek számítanak, a biztonság szempontjából pedig mindenekelőtt az, hogy támogatott ágat üzemeltessen naprakész patch-állapottal.

A PHP 8 újdonságai áttekintve

A táblázat a php.net kiadási oldalainak fő pontjait foglalja össze. Az első kiadás dátumai a php.net szerint.

Verzió Megjelent Legfontosabb újdonságok Válogatás az elavulásokból és törésekből
8.0 2020. 11. 26. elnevezett argumentumok, attribútumok, Constructor Property Promotion, uniótípusok, match, ?->, JIT a 0 == 'foobar' most false, típushibák figyelmeztetések helyett
8.1 2021. 11. 25. enumok, readonly tulajdonságok, first-class callable-ök strlen(...), new inicializálókban, metszettípusok, never, Fiberek –
8.2 2022. 12. 08. readonly osztályok, DNF-típusok, null/false/true típusként, Random bővítmény, konstansok trait-ekben, #[\SensitiveParameter] a dinamikus tulajdonságok elavultak
8.3 2023. 11. 23. típusos osztálykonstansok, #[\Override], json_validate(), mb_str_pad(), php -l több fájlra –
8.4 2024. 11. 21. property hookok, aszimmetrikus láthatóság, #[\Deprecated], új DOM API HTML5-tel, BcMath\Number, array_find(), lazy objektumok az implicit nullable paraméterek elavultak; IMAP, OCI8, PDO_OCI, pspell átkerült a PECL-be
8.5 2025. 11. 20. pipe operátor, URI-bővítmény, Clone With, #[\NoDiscard], array_first()/array_last() a backtick operátor elavult, a disable_classes eltávolítva

PHP 8.0 és 8.1: a nagy lépés

A PHP 8.0 érezhetően szigorúbbá és kifejezőbbé tette a nyelvet. A kiadási oldal szerint a belső függvények mostantól következetesen TypeError vagy ValueError kivételt dobnak, ahelyett, hogy csak figyelmeztetést adnának. A számok és karakterláncok közötti összehasonlítások tisztább szabályokat követnek.

<?php
// PHP 8.0: a match szigorúan hasonlít össze, és nem kell break
$status = 404;
echo match (true) {
    $status >= 500 => 'Serverfehler',
    $status >= 400 => 'Anfragefehler',
    default        => 'in Ordnung',
};

// PHP 8.0: nullsafe operátor
$land = $bestellung?->kunde?->adresse?->land;

A PHP 8.1 enumokat hozott, vagyis rögzített értékű felsorolási típusokat, és readonly tulajdonságokat, amelyek csak egyszer állíthatók be:

<?php
enum Rolle: string {
    case Leser = 'leser';
    case Redakteur = 'redakteur';
    case Admin = 'admin';
}

final class Benutzer {
    public function __construct(
        public readonly string $name,
        public readonly Rolle $rolle,
    ) {}
}

$b = new Benutzer('Erika', Rolle::from('redakteur'));

A Rolle::from() ismeretlen értékeknél hibát dob. Ez megakadályozza, hogy az űrlapokból tetszőleges karakterláncok szerepként átcsússzanak. Aki hiba helyett üres értéket szeretne, a Rolle::tryFrom() függvényt használja, amely ismeretlen értékeknél null-t ad vissza.

A 8.1-ben újak a Fiberek is, a párhuzamos folyamatok alapja, amelyre az aszinkron feldolgozás programkönyvtárai épülnek. A rendes weboldal-üzemben ebből kevés tűnik fel, a modern keretrendszerekben és üzenetsorokban viszont igen.

PHP 8.2 és 8.3: takarítás és biztosítás

A PHP 8.2 elavulttá nyilvánította a dinamikus tulajdonságokat. Aki egy objektumnak nem deklarált tulajdonságot ad értékül, figyelmeztetést kap; a #[\AllowDynamicProperties] segítségével ez egyes osztályokra engedélyezhető. A régebbi bővítmények ezért gyakran sok üzenetet generálnak a naplóban.

A biztonság szempontjából érdekes az új Random bővítmény, amelynek alapértelmezett randomizere a kiadási oldal szerint kriptográfiailag biztonságos véletlenszám-generátort használ, és a #[\SensitiveParameter] attribútum, amely elrejti az olyan értékeket, mint a jelszavak, a stack trace-ekben. A biztonságos véletlen értékekről bővebben a Biztonságos véletlenszámok és tokenek PHP-ban cikkben olvashat.

A PHP 8.3 típusos osztálykonstansokkal, a metódusok felülírásakor elírások ellen védő #[\Override] attribútummal és a json_validate() függvénnyel bővült, amely a JSON-t teljes dekódolás nélkül ellenőrzi.

PHP 8.4 és 8.5: modern nyelvi eszközök

A PHP 8.4 bevezette a property hookokat, vagyis a logikát közvetlenül a tulajdonságoknál, és az aszimmetrikus láthatóságot, például a public private(set) formát. Ehhez jött egy új, HTML5-támogatású DOM API és olyan függvények, mint az array_find(), az array_any() és az array_all(). A kiadási oldal szerint az IMAP, OCI8, PDO_OCI és pspell bővítményeket kivették a magból, és a PECL-be helyezték át. Az IMAP-ot is használó alkalmazásoknak ezután külön csomag kell.

A PHP 8.5 hozta a pipe operátort, amely balról jobbra láncolja a hívásokat:

<?php
$slug = '  Neue Produkte 2026  '
    |> trim(...)
    |> strtolower(...)
    |> (fn(string $s): string => str_replace(' ', '-', $s));
// Eredmény: "neue-produkte-2026"

Új az URI-bővítmény is, amely a címeket az RFC 3986 és a WHATWG URL szabvány szerint bontja elemeire. Ez biztonsági szempontból releváns, mert az egyenetlenül elemzett URL-ek a megkerült ellenőrzések ismert oka. A backtick operátor, a shell_exec() rövid formája, elavult, a disable_classes beállítást eltávolították. Aki használta, igazítsa a megerősítését.

Újdonságok, frissítések és PHP2Shell

Az új nyelvi funkciók nem zárják be az értelmezőben lévő réseket. A PHP2Shell ellen csak az adott ág aktuális patch-állapota segít: 8.5.12, 8.4.27, 8.3.36 vagy 8.2.35. A PHP 8.1-hez és a 8.0-hoz már nincs hivatalos frissítés. Aki ott ragadt, annak frissítenie kell, és ebben az újdonságok keveset segítenek, a törések viszont sokat számítanak.

Egy biztonságos frissítési út öt lépésben:

  1. A célverzió kijelölése a gyártó rendszerkövetelményeinek és a kiadási ciklusnak megfelelően.
  2. A függőségek Composeren keresztül és a bővítmények kompatibilis állapotra hozása.
  3. A kód ellenőrzése a célverzióval szemben statikus elemzéssel és tesztekkel.
  4. Kipróbálás tesztkörnyezetben az éles adatok másolatával, a naplók kiértékelése elavulások után.
  5. Átállás, az összes PHP-folyamat újraindítása és az állapot dokumentálása.

A típusokról háttérinformációt nyújt A PHP típusrendszere.

Hogyan segít konkrétan a PHP SOS?

  • Kompatibilitás ellenőrzése: Elemezzük a kódját és a bővítményeit a célverzióval szembeni törések szempontjából.
  • Frissítés végrehajtása: A támogatott PHP-verzióra való migrációval az alkalmazásokat tesztelten emeljük följebb.
  • A megerősítés igazítása: Az eltávolított beállításokat, például a disable_classes-t hatásos alternatívákkal váltjuk fel.
  • A patch-állapot fenntartása: A frissítés után naprakészen tartjuk az ágat, és igazoljuk minden újraindítást.

Gyakori kérdések

Melyik PHP 8-verziót használjam ma?

Új projektekhez a PHP 8.4-et vagy a 8.5-öt, mert ezeket támogatják a legtovább: a 8.4-et 2028 végéig, a 8.5-öt 2029 végéig. Döntő, hogy az alkalmazása a gyártó rendszerkövetelményei szerint mit támogat. A PHP 8.2 2026. december 31-én ér véget.

Mi romlik el leggyakrabban a PHP 7.4-ről a PHP 8-ra váltáskor?

Gyakran a szigorúbb típusellenőrzések: a belső függvények a PHP 8-ban TypeError vagy ValueError kivételt dobnak, ahelyett, hogy csak figyelmeztetést adnának. A számok és karakterláncok közötti megváltozott összehasonlítások is feltűnnek. A statikus elemzés és a tesztek a legtöbbet előre kiderítik.

Gyorsabbá teszi a JIT a weboldalamat?

Többnyire alig. A PHP 8.0 kiadási oldala szerint a tipikus webalkalmazások teljesítménye nagyjából a PHP 7.4 szintjén van, a számításigényes feladatok viszont jelentősen profitálhatnak. A PHP 8.4 óta a JIT alapértelmezetten ki van kapcsolva.

Mely újdonságok segítik a biztonságot?

Többek között a PHP 8.2 új Random bővítménye kriptográfiailag biztonságos alapértelmezéssel, a SensitiveParameter attribútum a jelszavak ellen a stack trace-ekben, az enumok és a readonly tulajdonságok egyértelműbb adatokért, valamint a PHP 8.0 óta következetesebb típushibák.

Források

Azonnali kapcsolat

Minden óra számít. Írjon nekünk most.

Ismertesse röviden a rendszert, a PHP-verziót és a megfigyelését. Jelentkezünk, tisztázzuk a helyzetet, és távolról dolgozunk, amíg az incidens le nem zárul és dokumentálva nem lesz.

Azonnali segítség