PHP Academy · Lektion

PHP-feltyper och felrapportering

Förstå meddelanden, varningar och allvarliga fel samt nivåerna för error_reporting.

Lektion 1 av 413 steg

PHP-feltyper och felrapportering är en gratis lektion i PHP Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för PHP Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i PHP Academy innehåller totalt 4 lektioner.

PHP-feltyper

PHP har flera allvarlighetsnivåer för fel:

  • Notice — mindre problem, körningen fortsätter
  • Warning — icke-kritiskt problem, körningen fortsätter
  • Fatal Error — körningen stoppas omedelbart
  • Parse Error — syntaxfel, stoppas före körningen
  • Deprecated — funktionen kommer att tas bort

error_reporting()

Styr vilka fel PHP rapporterar med error_reporting():

<?php
// Show all errors (development)
error_reporting(E_ALL);

// Hide notices and deprecated
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);

// Production: no display, log to file
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');

display_errors jämfört med log_errors

Viktiga php.ini-inställningar för felhantering:

  • display_errors = On — visa fel i webbläsaren (endast utveckling)
  • display_errors = Off — dölj fel för användare (produktion)
  • log_errors = On — skriv till filen error_log
  • error_log = /path/to/file — ange loggplats

Visa aldrig fel för användare i produktion!

Utlösa fel med trigger_error

Generera egna PHP-fel med trigger_error():

<?php
function divide(int $a, int $b): float {
    if ($b === 0) {
        trigger_error('Division by zero', E_USER_WARNING);
        return 0.0;
    }
    return $a / $b;
}

echo divide(10, 0);  // triggers E_USER_WARNING

Anpassad felhanterare

Registrera en egen felhanterare med set_error_handler():

<?php
set_error_handler(function(int $errno, string $errstr, string $file, int $line): bool {
    $message = "[$errno] $errstr in $file:$line";
    error_log($message);
    if ($errno === E_USER_ERROR) {
        http_response_code(500);
        die('Internal error — please try again later');
    }
    return true;  // don't execute PHP internal error handler
});

trigger_error('Custom error message', E_USER_ERROR);

Vanliga felkällor

Typiska orsaker till PHP-fel:

  • Åtkomst till en odefinierad arraynyckel → Notice
  • Anrop av en funktion som returnerar false och sedan användning av resultatet → Warning
  • Anrop av en odefinierad funktion → Fatal Error
  • Saknat semikolon → Parse Error
  • Division med noll → Warning (returnerar INF eller NAN)

Operatorn @ för undertryckning av fel

Operatorn @ undertrycker fel från ett enskilt uttryck — undvik den och använd korrekt felhantering:

<?php
// Bad: hides errors silently
$result = @file_get_contents('missing.txt');

// Good: check explicitly
$result = file_get_contents('missing.txt');
if ($result === false) {
    // handle the error
    echo 'File not found';
}

PHP 8 JIT och ändringar i felhanteringen

PHP 8 gjorde felhanteringen striktare på vissa punkter:

  • Många varningar uppgraderas till TypeError/ValueError
  • str_contains/starts_with/ends_with ersätter regex vid enkla kontroller
  • Felaktiga argumenttyper leder som standard till TypeError

ini_set under körning

Åsidosätt inställningar i php.ini under körning:

<?php
// Display errors during development
if (getenv('APP_ENV') === 'development') {
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
    error_reporting(E_ALL);
} else {
    ini_set('display_errors', '0');
    ini_set('log_errors', '1');
    error_reporting(E_ALL);
}

Kontrollera felnivå

Identifiera felnivåer med bitvis AND:

<?php
$level = error_reporting();

if ($level & E_NOTICE) {
    echo 'Notices are reported';
}
if ($level & E_WARNING) {
    echo 'Warnings are reported';
}

// Check specific error types
echo (E_ALL & E_NOTICE) ? 'E_ALL includes E_NOTICE' : 'no';

Bästa praxis för felloggning

Bra vanor för felloggning:

  • Logga alltid fel i produktion
  • Ta med kontext: användar-ID, URL för begäran och tidsstämpel
  • Använd strukturerad loggning (JSON) för enklare tolkning
  • Rotera loggfiler för att förhindra att disken blir full
  • Övervaka loggar med verktyg som ELK, Datadog eller Papertrail

Snabbtest

Vilken PHP-feltyp stoppar körningen omedelbart?

Sammanfattning: PHP-felrapportering

Grunderna i felhantering:

  • Feltyper: Notice, Warning, Fatal, Parse, Deprecated
  • Ange nivån med error_reporting()
  • Stäng av visning och aktivera loggning i produktion
  • Registrera en anpassad hanterare med set_error_handler()
  • Undertryck aldrig fel med @ i produktionskod
Gratis att börja

Lär dig PHP med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
49
Lektioner
195

Vanliga frågor

Är lektionen ”PHP-feltyper och felrapportering” gratis?

Ja – hela texten till ”PHP-feltyper och felrapportering” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i PHP Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i PHP Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”PHP-feltyper och felrapportering”?

Förstå meddelanden, varningar och allvarliga fel samt nivåerna för error_reporting. Ni övar på PHP Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig PHP Academy?

Du behöver inga förkunskaper. Utbildningen i PHP Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”PHP-feltyper och felrapportering”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här PHP Academy-lektionen?

Ja. Varje PHP Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. PHP-feltyper och felrapportering
  2. Try, Catch och Finally
  3. Skapa egna undantag
  4. Logga fel och bästa praxis
← Tillbaka till PHP Academy