# PSR-standarder från PHP-FIG

> PSR-standarder från PHP-FIG: alla PSR från 0 till 22 med status, de viktigaste i praktiken och vad PSR-3, PSR-4 och PSR-7 betyder för säkerheten.

Källa: https://phpsos.de/sv/php/psr-standards/  
Aktualitet: 2026-10-25  
Leverantör: PHP SOS, PHP-nödhjälp och serversäkerhet. Omedelbar hjälp via WhatsApp: https://wa.me/491736494914?text=Hej%20PHP%20SOS%2C%20vi%20beh%C3%B6ver%20hj%C3%A4lp%20med%20v%C3%A5r%20PHP-server.%20F%C3%B6retag%3A%20%E2%80%A6%20Webbplats%3A%20%E2%80%A6

**Kort sagt:** PSR (PHP Standards Recommendations) är standarder från PHP-FIG, en grupp etablerade PHP-projekt. De fastställer gemensamma regler och gränssnitt, till exempel PSR-4 för autoloading, PSR-3 för loggare, PSR-7 för HTTP-meddelanden och PSR-11 för containrar. Varje PSR har en status: accepterad, utkast, föråldrad eller övergiven. PSR gör kod mer utbytbar och lättare att granska, men stänger inga luckor i PHP-tolken som PHP2Shell.

## Vad är PHP-FIG och vad är PSR?

PHP-FIG står för PHP Framework Interop Group. Gruppen beskriver själv sitt mål som att föra PHP framåt genom samarbete och standarder. Bakom en PSR står alltså ingen tillverkare, utan en överenskommelse mellan projekt som vill hålla sin programvara kompatibel med varandra.

För beslutsfattare är nyttan konkret: Håller sig en applikation till PSR-gränssnitt går det att byta ut till exempel loggbiblioteket utan att röra hela koden. Det minskar beroendet av enskilda paket och leverantörer.

## En PSR:s väg: från Pre-Draft till Accepted

PHP-FIG:s stadgar beskriver ett fast förlopp:

1. **Pre-Draft:** Man klarlägger om intresset räcker. En arbetsgrupp bildas, och efter lyckad omröstning får förslaget ett PSR-nummer.
2. **Draft:** Förslaget utarbetas, alternativ och motiveringar förs in i ett metadokument.
3. **Review:** Gemenskapen testar specifikationen med provimplementeringar, i minst fyra veckor och tills två oberoende, hållbara implementeringar finns.
4. **Accepted:** Efter lyckad omröstning är PSR:n antagen; arbetsgruppen upplöses.

Vid sidan av det finns två ytterligare tillstånd. **Deprecated** betyder: antagen men inte längre rekommenderad, oftast för att en nyare standard ersätter den. **Abandoned** betyder: Man arbetar inte längre med den.

## Alla PSR med status

Läget enligt PHP-FIG:s översikt vid tidpunkten för den här sidan:

| Nr | Titel | Status |
|---|---|---|
| PSR-0 | Autoloading Standard | föråldrad |
| PSR-1 | Basic Coding Standard | accepterad |
| PSR-2 | Coding Style Guide | föråldrad |
| PSR-3 | Logger Interface | accepterad |
| PSR-4 | Autoloading Standard | accepterad |
| PSR-5 | PHPDoc Standard | utkast |
| PSR-6 | Caching Interface | accepterad |
| PSR-7 | HTTP Message Interface | accepterad |
| PSR-8 | Huggable Interface | övergiven |
| PSR-9 | Security Advisories | övergiven |
| PSR-10 | Security Reporting Process | övergiven |
| PSR-11 | Container Interface | accepterad |
| PSR-12 | Extended Coding Style Guide | accepterad |
| PSR-13 | Hypermedia Links | accepterad |
| PSR-14 | Event Dispatcher | accepterad |
| PSR-15 | HTTP Handlers | accepterad |
| PSR-16 | Simple Cache | accepterad |
| PSR-17 | HTTP Factories | accepterad |
| PSR-18 | HTTP Client | accepterad |
| PSR-19 | PHPDoc tags | utkast |
| PSR-20 | Clock | accepterad |
| PSR-21 | Internationalization | utkast |
| PSR-22 | Application Tracing | utkast |

## De viktigaste PSR i praktiken

- **PSR-4 (autoloading):** kopplar klassnamn till filsökvägar och är grunden för Composers autoloader. Detaljer på sidan [Namnrymder och autoloading](https://phpsos.de/sv/php/namespaces-autoloading/).
- **PSR-1 och PER Coding Style:** gemensamma regler för stavning och formatering. PER Coding Style utökar och ersätter enligt PHP-FIG PSR-12 och förutsätter PSR-1.
- **PSR-3 (loggare):** enhetligt loggargränssnitt i namnrymden `Psr\Log` med åtta nivåer från `emergency` till `debug`.
- **PSR-7, PSR-15, PSR-17, PSR-18 (HTTP):** gränssnitt för förfrågningar och svar, middleware, fabriker och HTTP-klienter. Många [PHP-ramverk](https://phpsos.de/sv/php/php-frameworks/) bygger på dem eller erbjuder bryggor.
- **PSR-11 (container):** gemensamt gränssnitt för dependency-injection-containrar.
- **PSR-6 och PSR-16 (cache):** två gränssnitt för mellanlagring, ett utförligt och ett enkelt.
- **PSR-14 och PSR-20 (händelser, klocka):** gemensamma gränssnitt för händelser och för aktuell tid. En utbytbar klocka gör tidsberoende kod, till exempel att token löper ut, lätt att testa.

Numren säger för övrigt ingenting om betydelsen. De delas ut när ett förslag går in i utkastfasen, därför står föråldrade och övergivna förslag mellan viktiga, accepterade standarder.

```php
<?php
use Psr\Log\LoggerInterface;

final class Bestellimport
{
    public function __construct(private LoggerInterface $log) {}

    public function importieren(string $datei): void
    {
        try {
            // ... bearbeta filen ...
        } catch (\Throwable $e) {
            $this->log->error('Import von {datei} fehlgeschlagen', [
                'datei'     => basename($datei),
                'exception' => $e,
            ]);
        }
    }
}
```

## Vad PSR har med säkerhet att göra

Flera standarder berör säkerheten direkt. PSR-3 fastställer att exceptions överlämnas under nyckeln `exception` i kontexten och att platshållare som `{datei}` ersätts från kontexten. Värden ska då inte maskeras i förväg, eftersom loggaren inte vet var de visas senare. Den som visar loggar i ett webbgränssnitt måste maskera där. Mer om det i inlägget [Logga säkert](https://phpsos.de/sv/blog/sicher-loggen-php/).

PSR-7 beskriver HTTP-meddelanden som oföränderliga objekt och erbjuder med `UploadedFileInterface::moveTo()` ett enhetligt sätt att spara uppladdade filer. Specifikationen kräver att originalfilen därefter är borttagen. Kontrollen av filtyp och målplats förblir applikationens uppgift.

Anmärkningsvärt är att PSR-9 (Security Advisories) och PSR-10 (Security Reporting Process) har övergivits. Någon gemensam standard för säkerhetsmeddelanden finns alltså inte; varje projekt reglerar det själv. Hur PHP-projektet självt hanterar luckor beskriver sidan [Så hanterar PHP-projektet säkerhetsluckor](https://phpsos.de/sv/php/php-sicherheitsprozess/).

Mot PHP2Shell hjälper standarder inte: Sårbarheterna CVE-2026-109618 och CVE-2026-109619 ligger i tolken. Det som krävs är uppdateringen till PHP 8.5.12, 8.4.27, 8.3.36 eller 8.2.35 och omstart av alla PHP-processer.

## Hur hjälper PHP SOS konkret?

- Vi kontrollerar hur er applikation loggar och ser till att exceptions hamnar i loggen men inga inloggningsuppgifter eller sessions-id:n.
- Vi bedömer hur uppladdnings- och HTTP-hanteringen är genomförd, även när den går via PSR-7-bibliotek.
- Vi undersöker egenutvecklad kod inom ramen för en [säkerhetsgranskning och penetrationstest](https://phpsos.de/sv/leistungen/sicherheitsaudit-penetrationstest/).
- Vi installerar PHP-uppdateringar, startar om alla workers och dokumenterar läget.


## Vanliga frågor

**Vad betyder PSR?**  
PSR står för PHP Standards Recommendation. Rekommendationerna tas fram och röstas fram av PHP-FIG, PHP Framework Interop Group. De är frivilliga men genomförs av många ramverk och bibliotek.

**Gäller PSR-12 fortfarande?**  
PSR-12 förs hos PHP-FIG fortfarande som accepterad. PHP-FIG har dock publicerat PER Coding Style som efterföljare, vilken enligt egen uppgift utökar och ersätter PSR-12. Aktuell där är version 3.1.

**Finns det en PSR för säkerhetsmeddelanden?**  
Det fanns två förslag, PSR-9 för Security Advisories och PSR-10 för processen att rapportera säkerhetsluckor. Båda förs hos PHP-FIG som övergivna. Projekt reglerar därför sin rapporteringsprocess själva.

**Måste mitt projekt följa PSR?**  
Nej, det finns ingen skyldighet. PSR-4 för autoloading och gränssnitt som PSR-3 eller PSR-7 gör det dock betydligt lättare att använda externa paket och byta tjänsteleverantör.

## Källor

- [PHP-FIG: PSR-översikt](https://www.php-fig.org/psr/)
- [PHP-FIG: PSR-arbetsflöde](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/)
