Trenutno stanje: PHP2Shell. Dve kritični ranljivosti PHP (CVSS 9,2) omogočata izvedbo škodljive kode brez prijave. Popravki od 21. 10. 2026.Kaj je zdaj treba storiti →

PHP 8.0 do 8.5: najpomembnejše novosti

Od match in JIT v PHP 8.0 do operatorja pipe in razširitve URI v PHP 8.5: novosti vsake različice, ovire pri nadgradnji in kaj prinašajo za varnost.

Stanje 5 min branjaZnanje o PHP

Na kratko: PHP 8.0 (november 2020) je prinesel imenovane argumente, atribute, unijske tipe, match, operator nullsafe in prevajalnik JIT. Nato so vsako leto sledile: 8.1 z enumi in fibri, 8.2 z razredi readonly, 8.3 s tipiziranimi konstantami razredov, 8.4 s property hooks in 8.5 z operatorjem pipe in razširitvijo URI. Vsaka različica opušča tudi staro. Pri nadgradnji zato štejejo testi, za varnost pa predvsem to, da upravljate podprto vejo z aktualnim stanjem popravkov.

Novosti v PHP 8 na kratko

Tabela povzema ključne točke strani izdaj na php.net. Datumi prve objave po php.net.

Različica Izšla Najpomembnejše novosti Izbor opuščanj in prelomov
8.0 26. 11. 2020 imenovani argumenti, atributi, Constructor Property Promotion, unijski tipi, match, ?->, JIT 0 == 'foobar' je zdaj false, napake tipov namesto opozoril
8.1 25. 11. 2021 enumi, lastnosti readonly, First-Class Callables strlen(...), new v inicializatorjih, tipi presečišča, never, fibri –
8.2 8. 12. 2022 razredi readonly, tipi DNF, null/false/true kot tipi, razširitev Random, konstante v traitih, #[\SensitiveParameter] dinamične lastnosti opuščene
8.3 23. 11. 2023 tipizirane konstante razredov, #[\Override], json_validate(), mb_str_pad(), php -l za več datotek –
8.4 21. 11. 2024 property hooks, asimetrična vidnost, #[\Deprecated], nov API DOM s HTML5, BcMath\Number, array_find(), lenivi objekti implicitno nullable parametri opuščeni; IMAP, OCI8, PDO_OCI, pspell v PECL
8.5 20. 11. 2025 operator pipe, razširitev URI, Clone With, #[\NoDiscard], array_first()/array_last() operator backtick opuščen, disable_classes odstranjen

PHP 8.0 in 8.1: velik korak

PHP 8.0 je jezik občutno naredil strožjega in izraznejšega. Po strani izdaje notranje funkcije zdaj dosledno vržejo TypeError ali ValueError, namesto da bi samo izpisale opozorila. Primerjave med števili in nizi sledijo čistejšim pravilom.

<?php
// PHP 8.0: match primerja strogo in ne potrebuje break
$status = 404;
echo match (true) {
    $status >= 500 => 'Serverfehler',
    $status >= 400 => 'Anfragefehler',
    default        => 'in Ordnung',
};

// PHP 8.0: operator nullsafe
$land = $bestellung?->kunde?->adresse?->land;

PHP 8.1 je prinesel enume, torej oštevilčene tipe s trdnimi vrednostmi, in lastnosti readonly, ki jih je mogoče nastaviti samo enkrat:

<?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'));

Rolle::from() pri neznanih vrednostih vrže napako. To preprečuje, da bi poljubni nizi iz obrazcev zdrsnili skozi kot vloga. Kdor namesto napake potrebuje prazno vrednost, uporabi Rolle::tryFrom(), ki pri neznanih vrednostih vrne null.

Nova v 8.1 so tudi fibri, podlaga za sočasne poteke, na kateri temeljijo knjižnice za asinhrono obdelavo. V običajnem delovanju spletne strani se od tega malo opazi, v sodobnih ogrodjih in čakalnih vrstah pa že.

PHP 8.2 in 8.3: čiščenje in zavarovanje

PHP 8.2 je opustil dinamične lastnosti. Kdor objektu dodeli nedeklarirano lastnost, dobi opozorilo; z #[\AllowDynamicProperties] je to mogoče dovoliti za posamezne razrede. Starejši vtičniki zato pogosto ustvarijo veliko sporočil v dnevniku.

Za varnost sta zanimiva nova razširitev Random, katere privzeti randomizer po strani izdaje uporablja kriptografsko varen generator naključnih števil, in atribut #[\SensitiveParameter], ki vrednosti, kot so gesla, skrije v stack traceih. Več o varnih naključnih vrednostih na strani Varna naključna števila in žetoni v PHP.

PHP 8.3 je dodal tipizirane konstante razredov, atribut #[\Override] proti tipkarskim napakam pri prepisovanju metod in json_validate(), ki JSON preveri, ne da bi ga v celoti dekodiral.

PHP 8.4 in 8.5: sodobna jezikovna sredstva

PHP 8.4 je uvedel property hooks, torej logiko neposredno na lastnostih, in asimetrično vidnost, kot je public private(set). Zraven so prišli nov API DOM s podporo HTML5 ter funkcije, kot so array_find(), array_any() in array_all(). Po strani izdaje so bile razširitve IMAP, OCI8, PDO_OCI in pspell iz jedra prestavljene v PECL. Aplikacije, ki na primer uporabljajo IMAP, potrebujejo ločen paket.

PHP 8.5 je prinesel operator pipe, ki klice veriži od leve proti desni:

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

Nova je tudi razširitev URI, ki naslove razčleni po RFC 3986 in standardu WHATWG URL. To je za varnost pomembno, ker so neenotno razčlenjeni URL znan vzrok zaobidenih preverjanj. Operator backtick kot kratka oblika shell_exec() je opuščen, nastavitev disable_classes je bila odstranjena. Kdor jo je uporabljal, naj prilagodi svoje utrjevanje.

Novosti, nadgradnje in PHP2Shell

Nove jezikovne funkcije ne zapirajo ranljivosti v interpreterju. Proti PHP2Shell pomaga samo aktualno stanje popravkov posamezne veje: 8.5.12, 8.4.27, 8.3.36 ali 8.2.35. Za PHP 8.1 in 8.0 uradnih posodobitev ni več. Kdor tam obtiči, mora nadgraditi, pri tem pa novosti pomagajo malo, prelomi pa veliko.

Varna pot nadgradnje v petih korakih:

  1. Določiti ciljno različico, ki ustreza sistemskim zahtevam proizvajalca in ciklu izdaj.
  2. Odvisnosti prek Composerja in vtičnike dvigniti na združljiva stanja.
  3. Kodo s statično analizo in testi preveriti glede na ciljno različico.
  4. Preizkusiti v preizkusnem okolju s kopijo produkcijskih podatkov, dnevnike pregledati glede opuščanj.
  5. Preklopiti, znova zagnati vse procese PHP in dokumentirati stanje.

Ozadje o tipih ponuja Sistem tipov v PHP.

Kako PHP SOS pomaga konkretno?

  • Preverjanje združljivosti: analiziramo vašo kodo in razširitve glede prelomov do ciljne različice.
  • Izvedba nadgradnje: z migracijo na podprto različico PHP aplikacije preizkušeno dvignemo.
  • Prilagoditev utrjevanja: odstranjene nastavitve, kot je disable_classes, nadomestimo z učinkovitimi alternativami.
  • Ohranjanje stanja popravkov: po nadgradnji vejo posodabljamo in dokažemo vsak ponovni zagon.

Pogosta vprašanja

Katero različico PHP 8 naj danes uporabljam?

Za nove projekte PHP 8.4 ali 8.5, ker sta podprta najdlje: 8.4 do konca 2028, 8.5 do konca 2029. Odločilno je, kaj vaša aplikacija po sistemskih zahtevah proizvajalca podpira. PHP 8.2 se konča 31. decembra 2026.

Kaj se pri prehodu s PHP 7.4 na PHP 8 najpogosteje pokvari?

Pogosto so to strožja preverjanja tipov: notranje funkcije v PHP 8 vržejo TypeError ali ValueError, namesto da bi samo izpisale opozorila. Opazne so tudi spremenjene primerjave med števili in nizi. Statična analiza in testi večino odkrijejo vnaprej.

Ali JIT pospeši mojo spletno stran?

Večinoma komaj. Po strani izdaje za PHP 8.0 je zmogljivost značilnih spletnih aplikacij približno na ravni PHP 7.4, računsko zahtevne naloge pa lahko občutno pridobijo. Od PHP 8.4 je JIT privzeto izklopljen.

Katere novosti pomagajo varnosti?

Med drugim nova razširitev Random v PHP 8.2 s kriptografsko varno privzeto vrednostjo, atribut SensitiveParameter proti geslom v stack traceih, enumi in lastnosti readonly za bolj nedvoumne podatke ter doslednejše napake tipov od PHP 8.0.

Viri

Takojšnji stik

Vsaka ura šteje. Pišite nam zdaj.

Na kratko opišite sistem, različico PHP in opažanje. Odzovemo se, razjasnimo stanje in delamo na daljavo, dokler incident ni zaključen in dokumentiran.

Takojšnja pomoč