PHP-feltyper och felrapportering
Förstå meddelanden, varningar och allvarliga fel samt nivåerna för error_reporting.
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_logerror_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_WARNINGAnpassad 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_withersä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
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
- PHP-feltyper och felrapportering
- Try, Catch och Finally
- Skapa egna undantag
- Logga fel och bästa praxis