PHP:n virhetyypit ja raportointi
Ymmärtäkää ilmoitukset, varoitukset ja vakavat virheet sekä error_reporting-tasot.
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-tiedostoonerror_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_WARNINGMukautettu 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_withkorvaavat 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
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
- PHP:n virhetyypit ja raportointi
- Try, catch ja finally
- Mukautettujen poikkeusten luominen
- Virheiden lokiin kirjaaminen ja parhaat käytännöt