PHP Academy · Oppitunti

PHP:n virhetyypit ja raportointi

Ymmärtäkää ilmoitukset, varoitukset ja vakavat virheet sekä error_reporting-tasot.

Oppitunti 1/413 vaihetta

PHP:n virhetyypit ja raportointi on ilmainen PHP Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu PHP Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. PHP Academy-kurssilla on yhteensä 4 oppituntia.

PHP:n virhetyypit

PHP:ssä on useita virheiden vakavuustasoja:

  • Notice — pieni ongelma, suoritus jatkuu
  • Warning — ei-kriittinen ongelma, suoritus jatkuu
  • Fatal Error — suoritus päättyy välittömästi
  • Parse Error — syntaksivirhe, suoritus päättyy ennen käynnistymistä
  • Deprecated — ominaisuus poistetaan käytöstä

error_reporting()

Määrittäkää error_reporting()-funktiolla, mitkä virheet PHP ilmoittaa:

<?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 vai log_errors

Keskeiset php.ini-asetukset virheenkäsittelyä varten:

  • display_errors = On — näytä virheet selaimessa (vain kehitysympäristössä)
  • display_errors = Off — piilota virheet käyttäjiltä (tuotannossa)
  • log_errors = On — kirjoita virheet error_log-tiedostoon
  • error_log = /path/to/file — määritä lokin sijainti

Älkää koskaan näyttäkö virheitä käyttäjille tuotannossa!

Virheiden aiheuttaminen trigger_error-funktiolla

Tuottakaa omia PHP-virheitä trigger_error()-funktion avulla:

<?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

Mukautettu virheenkäsittelijä

Rekisteröikää oma virheenkäsittelijänne set_error_handler()-funktion avulla:

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

Yleiset virhelähteet

Tyypillisiä PHP-virheiden aiheuttajia:

  • Määrittelemättömän taulukkoavaimen käyttäminen → Notice
  • False-arvon palauttavan funktion kutsuminen ja tuloksen käyttäminen → Warning
  • Määrittelemättömän funktion kutsuminen → Fatal Error
  • Puuttuva puolipiste → Parse Error
  • Nollalla jakaminen → Warning (palauttaa arvon INF tai NAN)

Virheiden vaimennusoperaattori @

@-operaattori vaimentaa yhden lausekkeen virheet — välttäkää sitä ja käyttäkää asianmukaista virheenkäsittelyä:

<?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:n JIT ja virheisiin tehdyt muutokset

PHP 8 tiukensi joitakin virheenkäsittelyn käytäntöjä:

  • Monet varoitukset muutettiin TypeError- tai ValueError-virheiksi
  • str_contains/starts_with/ends_with korvaavat säännölliset lausekkeet yksinkertaisissa tarkistuksissa
  • Väärän tyyppisten argumenttien välittäminen aiheuttaa oletusarvoisesti TypeError-virheen

ini_set ajonaikaisesti

Ohittakaa php.ini-asetukset ajon aikana:

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

Virhetason tarkistaminen

Tunnistakaa virhetasot bittikohtaisella AND-operaatiolla:

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

Virhelokituksen parhaat käytännöt

Hyviä virhelokituksen käytäntöjä:

  • Kirjatkaa virheet aina lokiin tuotannossa
  • Sisällyttäkää asiayhteys: käyttäjän tunniste, pyynnön URL-osoite ja aikaleima
  • Käyttäkää jäsenneltyä lokitusta (JSON), jotta lokien käsittely olisi helpompaa
  • Kierrättäkää lokitiedostoja, jotta levy ei täyty
  • Valvokaa lokeja esimerkiksi ELK:n, Datadogin tai Papertrailin avulla

Pikatarkistus

Mikä PHP:n virhetyyppi keskeyttää suorituksen välittömästi?

Kertaus: PHP:n virheraportointi

Virheenkäsittelyn perusteet:

  • Virhetyypit: Notice, Warning, Fatal, Parse ja Deprecated
  • Asettakaa taso error_reporting()-funktion avulla
  • Poistakaa näyttäminen käytöstä ja ottakaa lokitus käyttöön tuotannossa
  • Rekisteröikää mukautettu käsittelijä set_error_handler()-funktion avulla
  • Älkää koskaan vaimentako virheitä @-operaattorilla tuotantokoodissa
Aloita maksutta

Opi PHP tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
49
Oppitunnit
195

Usein kysytyt kysymykset

Onko oppitunti ”PHP:n virhetyypit ja raportointi” ilmainen?

Kyllä – oppitunnin ”PHP:n virhetyypit ja raportointi” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko PHP Academy-kurssin, päivitä CoddyKit PROhon. PHP Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”PHP:n virhetyypit ja raportointi”?

Ymmärtäkää ilmoitukset, varoitukset ja vakavat virheet sekä error_reporting-tasot. Harjoittelet PHP Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni PHP Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin PHP Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”PHP:n virhetyypit ja raportointi”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä PHP Academy-oppitunnilla?

Kyllä. Jokainen PHP Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. PHP:n virhetyypit ja raportointi
  2. Try, catch ja finally
  3. Mukautettujen poikkeusten luominen
  4. Virheiden lokiin kirjaaminen ja parhaat käytännöt
← Takaisin: PHP Academy