# Štandardy PSR od PHP-FIG

> Štandardy PSR od PHP-FIG: všetky PSR od 0 do 22 so stavom, najdôležitejšie v praxi a čo PSR-3, PSR-4 a PSR-7 znamenajú pre bezpečnosť.

Zdroj: https://phpsos.de/sk/php/psr-standards/  
Stav: 25.10.2026  
Poskytovateľ: PHP SOS, Núdzová pomoc pri PHP a bezpečnosť serverov. Okamžitá pomoc cez WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20de%C5%88%2C%20PHP%20SOS%2C%20potrebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20serverom%20s%20PHP.%20Spolo%C4%8Dnos%C5%A5%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručne:** PSR (PHP Standards Recommendations) sú štandardy PHP-FIG, skupiny etablovaných projektov PHP. Určujú spoločné pravidlá a rozhrania, napríklad PSR-4 pre autoloading, PSR-3 pre loggery, PSR-7 pre správy HTTP a PSR-11 pre kontajnery. Každý PSR má stav: akceptovaný, návrh, zastaraný alebo opustený. PSR robia kód zameniteľnejším a ľahšie kontrolovateľným, ale neuzatvárajú zraniteľnosti v interpreteri PHP, ako PHP2Shell.

## Čo je PHP-FIG a čo sú PSR?

PHP-FIG znamená PHP Framework Interop Group. Skupina sama opisuje svoj cieľ ako posúvanie PHP dopredu prostredníctvom spolupráce a štandardov. Za PSR teda nestojí výrobca, ale dohoda medzi projektmi, ktoré chcú svoj softvér udržať navzájom kompatibilný.

Pre rozhodovateľov je prínos hmatateľný: ak sa aplikácia drží rozhraní PSR, dá sa napríklad vymeniť knižnica na zapisovanie logov bez zásahu do celého kódu. To znižuje závislosť od jednotlivých balíkov a dodávateľov.

## Cesta PSR: od Pre-Draft po Accepted

Stanovy PHP-FIG opisujú pevný postup:

1. **Pre-Draft:** Zisťuje sa, či je dostatočný záujem. Vytvorí sa pracovná skupina a po úspešnom hlasovaní dostane návrh číslo PSR.
2. **Draft:** Návrh sa vypracúva, alternatívy a odôvodnenia sa dostanú do metadokumentu.
3. **Review:** Komunita testuje špecifikáciu pomocou skúšobných implementácií, najmenej štyri týždne a dovtedy, kým nie sú k dispozícii dve nezávislé, životaschopné implementácie.
4. **Accepted:** Po úspešnom hlasovaní je PSR prijatý; pracovná skupina sa rozpustí.

Okrem toho existujú dva ďalšie stavy. **Deprecated** znamená: prijatý, ale už sa neodporúča, väčšinou preto, že ho nahradil novší štandard. **Abandoned** znamená: už sa na ňom nepracuje.

## Všetky PSR so stavom

Stav podľa prehľadu PHP-FIG v čase vzniku tejto stránky:

| Č. | Názov | Stav |
|---|---|---|
| PSR-0 | Autoloading Standard | zastaraný |
| PSR-1 | Basic Coding Standard | akceptovaný |
| PSR-2 | Coding Style Guide | zastaraný |
| PSR-3 | Logger Interface | akceptovaný |
| PSR-4 | Autoloading Standard | akceptovaný |
| PSR-5 | PHPDoc Standard | návrh |
| PSR-6 | Caching Interface | akceptovaný |
| PSR-7 | HTTP Message Interface | akceptovaný |
| PSR-8 | Huggable Interface | opustený |
| PSR-9 | Security Advisories | opustený |
| PSR-10 | Security Reporting Process | opustený |
| PSR-11 | Container Interface | akceptovaný |
| PSR-12 | Extended Coding Style Guide | akceptovaný |
| PSR-13 | Hypermedia Links | akceptovaný |
| PSR-14 | Event Dispatcher | akceptovaný |
| PSR-15 | HTTP Handlers | akceptovaný |
| PSR-16 | Simple Cache | akceptovaný |
| PSR-17 | HTTP Factories | akceptovaný |
| PSR-18 | HTTP Client | akceptovaný |
| PSR-19 | PHPDoc tags | návrh |
| PSR-20 | Clock | akceptovaný |
| PSR-21 | Internationalization | návrh |
| PSR-22 | Application Tracing | návrh |

## Najdôležitejšie PSR pre prax

- **PSR-4 (autoloading):** priraďuje názvy tried k cestám súborov a je základom autoloadera Composeru. Podrobnosti na stránke [Menné priestory a autoloading](https://phpsos.de/sk/php/namespaces-autoloading/).
- **PSR-1 a PER Coding Style:** spoločné pravidlá pre písanie a formátovanie. PER Coding Style podľa PHP-FIG rozširuje a nahrádza PSR-12 a predpokladá PSR-1.
- **PSR-3 (logger):** jednotné rozhranie loggera v mennom priestore `Psr\Log` s ôsmimi úrovňami od `emergency` po `debug`.
- **PSR-7, PSR-15, PSR-17, PSR-18 (HTTP):** rozhrania pre požiadavky a odpovede, middleware, továrne a klientov HTTP. Mnohé [frameworky PHP](https://phpsos.de/sk/php/php-frameworks/) na nich stoja alebo ponúkajú mosty.
- **PSR-11 (kontajner):** spoločné rozhranie pre kontajnery dependency injection.
- **PSR-6 a PSR-16 (cache):** dve rozhrania pre vyrovnávaciu pamäť, podrobné a jednoduché.
- **PSR-14 a PSR-20 (udalosti, hodiny):** spoločné rozhrania pre udalosti a pre aktuálny čas. Vymeniteľné hodiny robia kód závislý od času, napríklad vypršanie platnosti tokenov, dobre testovateľným.

Čísla mimochodom nič nevypovedajú o dôležitosti. Prideľujú sa pri vstupe do fázy návrhu, preto stoja zastarané a opustené návrhy medzi dôležitými, akceptovanými štandardmi.

```php
<?php
use Psr\Log\LoggerInterface;

final class Bestellimport
{
    public function __construct(private LoggerInterface $log) {}

    public function importieren(string $datei): void
    {
        try {
            // ... spracovať súbor ...
        } catch (\Throwable $e) {
            $this->log->error('Import von {datei} fehlgeschlagen', [
                'datei'     => basename($datei),
                'exception' => $e,
            ]);
        }
    }
}
```

## Čo majú PSR spoločné s bezpečnosťou

Viaceré štandardy sa bezpečnosti dotýkajú priamo. PSR-3 určuje, že výnimky sa odovzdávajú pod kľúčom `exception` v kontexte a zástupné znaky ako `{datei}` sa nahrádzajú z kontextu. Hodnoty pritom nemajú byť vopred maskované, pretože logger nevie, kde sa neskôr zobrazia. Kto zobrazuje logy vo webovom rozhraní, musí maskovať tam. Viac v článku [Bezpečné zapisovanie do logov](https://phpsos.de/sk/blog/sicher-loggen-php/).

PSR-7 opisuje správy HTTP ako nemenné objekty a s `UploadedFileInterface::moveTo()` ponúka jednotný spôsob ukladania nahraných súborov. Špecifikácia vyžaduje, aby bol pôvodný súbor potom odstránený. Kontrola typu súboru a cieľového miesta zostáva úlohou aplikácie.

Pozoruhodné je, že PSR-9 (Security Advisories) a PSR-10 (Security Reporting Process) boli opustené. Spoločný štandard pre bezpečnostné oznámenia teda neexistuje; každý projekt si ho upravuje sám. Ako so zraniteľnosťami nakladá samotný projekt PHP, opisuje stránka [Ako projekt PHP rieši bezpečnostné zraniteľnosti](https://phpsos.de/sk/php/php-sicherheitsprozess/).

Proti PHP2Shell štandardy nepomáhajú: zraniteľnosti CVE-2026-109618 a CVE-2026-109619 sú v interpreteri. Povinná je aktualizácia na PHP 8.5.12, 8.4.27, 8.3.36 alebo 8.2.35 a reštart všetkých procesov PHP.

## Ako PHP SOS konkrétne pomáha?

- Kontrolujeme, ako vaša aplikácia zapisuje logy, a zabezpečujeme, aby výnimky skončili v logu, ale nie prístupové údaje ani identifikátory relácií.
- Hodnotíme, ako je implementované spracovanie nahrávania a HTTP, aj keď beží cez knižnice PSR-7.
- Vlastné vývojové diela skúmame v rámci [bezpečnostného auditu a penetračného testu](https://phpsos.de/sk/leistungen/sicherheitsaudit-penetrationstest/).
- Nasadzujeme aktualizácie PHP, reštartujeme všetky workery a dokumentujeme stav.


## Časté otázky

**Čo znamená PSR?**  
PSR znamená PHP Standards Recommendation. Odporúčania vypracúva a odsúhlasuje PHP-FIG, PHP Framework Interop Group. Sú dobrovoľné, ale mnohé frameworky a knižnice ich implementujú.

**Platí PSR-12 ešte?**  
PSR-12 je u PHP-FIG naďalej vedený ako akceptovaný. PHP-FIG však zverejnila pod názvom PER Coding Style nástupcu, ktorý podľa vlastného vyjadrenia PSR-12 rozširuje a nahrádza. Aktuálna je tam verzia 3.1.

**Existuje PSR pre bezpečnostné oznámenia?**  
Existovali dva návrhy, PSR-9 pre Security Advisories a PSR-10 pre proces hlásenia bezpečnostných zraniteľností. Oba sú u PHP-FIG vedené ako opustené. Projekty si preto proces hlásenia upravujú samy.

**Musí môj projekt dodržiavať PSR?**  
Nie, povinnosť neexistuje. PSR-4 pre autoloading a rozhrania ako PSR-3 alebo PSR-7 však výrazne uľahčujú nasadenie cudzích balíkov a výmenu dodávateľov.

## Zdroje

- [PHP-FIG: Prehľad PSR](https://www.php-fig.org/psr/)
- [PHP-FIG: Pracovný postup PSR](https://www.php-fig.org/bylaws/psr-workflow/)
- [PHP-FIG: PER Coding Style](https://www.php-fig.org/per/coding-style/)
- [PHP-FIG: PSR-3 Logger Interface](https://www.php-fig.org/psr/psr-3/)
- [PHP-FIG: PSR-7 HTTP Message Interface](https://www.php-fig.org/psr/psr-7/)
