PHP klaidų pranešimai

PHP Klaidų pranešimai

PHP Klaidų pranešimai


Vienas iš PHP privalumų yra visapusiškas klaidų valdymas. Jūs galite nurodyti kokias klaidas vykdyti, jas išvesti ir kurias ne. Šiame straipsnyje bus aprašomos pagrindiniai PHP klaidų pranešimai, jų valdymai ir panaudojimas.

PHP Klaidų tipai

Yra įvairiausių klaidų tipų kurie gali būti užfiksuojami PHP kalboje. Kai kurios klaidos gali būti praleidžiamos ir ignoruojamos, o kai kurios klaidos sustabdo skripto vykdymą.

Žemiau pateikiamas sąrašas PHP esamų klaidų kurios jau yra nustatytos:

  • E_ERROR – Tai galutinė klaida. Po jos gavimo skripto veikimas yra sustabdomas ir toliau nebevykdomas. Ši klaida gali būti gaunama po to kai nėra užtektinai nustatyta atminties norimam procesui atlikti ir panašiai.
  • E_WARNING – Veikimo klaida kuri įspėja apie esamą klaidą bet nenutraukia skripto veikimo.
  • E_PARSE – Kompiliavimo metu sugeneruota klaida. Sugeneruotos klaidos turėtų būti sugeneruotos tik analizatoriaus.
  • E_NOTICE – Pranešimas kuris nurodo kad susidarė situacija dėl kurios gali įvykti klaida, tačiau tai tėra tik pranešimas ir nėra realus klaidos pranešimas.
  • E_CORE_ERROR – Kritinė klaida kuri susidarė pasileidžiant PHP. Tai panašu kaip ir E_ERROR, tik šią klaida sugeneruoja PHP branduolys.
  • E_CORE_WARNING – Panašus klaidos pranešimas kaip ir E_WARNING tik šiuo atveju klaidą sugeneruoja PHP branduolys paleidimo metu.
  • E_COMPILE_ERROR – Kritinė kompiliavimo metu susidariusi klaida. Panašią klaidą sugeneruoją ir E_ERROR tik šiuo atveju šią klaidą susgeneruoja Zend Scripting Engine
  • E_COMPILE_WARNING – Kompiliavimo metu įvykęs įspėjimas apie klaidą. Panašią klaidą sugeneruoja ir E_WARNING, tik šiuo atveju klaidą sugeneruoja Zend Scripting Engine
  • E_USER_ERROR – Vartotojo sugeneruota klaida. Čia taip pat kaip ir E_ERROR išskyrus tai kad klaida sugeneruojama PHP skripte naudojant funkciją trigger_error().
  • E_USER_WARNING – Vartotojo sugeneruota klaida. Čia taip kaip ir E_WARNING išskyrus tai kad klaida sugeneruojama PHP skripte naudojant funkciją trigger_error().
  • E_STRICT – Įtraukiamas į PHP kad būtų pasiūlyti pakeitimai jūsų kodui, kuris užtikrintų geresnį sąveiką su PHP kompiliatoriumi ir perduoti geriau suderinamą kodą.
  • E_RECOVERABLE_ERROR – Gaudoma kritinė klaida. Tai nurodo kad tikriausiai įvyko kritinė klaida, bet nepalieka varikliuko nestabilioje pozicijoje. Jeigu klaida nėra gaudoma nurodant vartotojo su funkcija set_error_handler(), tuomet išvedama E_ERROR klaida.
  • E_DEPRECATED – Įjungiamas klaidų pranešimas apie tai kad esamas kodas neveiks būsimose versijose.
  • E_USER_DEPRECATED – tas pats kas E_DEPRECATED
  • E_ALL – Visos klaidos ir įspėjimai yra palaikomi išskyrus E_STRICT. tik tokiu atveju pranešimas sugeneruojamas vartotojo su funkcija trigger_error()

Kurios klaidos yra rodomos?

Vieni iš aukščiau išvardintų klaidų pranešimai yra nustatomos pagal error_reporting nustatymus:

  • Galite nustatyti savo php.ini faile
  • Galite nurodyti savo web serverio nustatymuose, tokiuose kaip (httpd.conf ar .htaccess)
  • Galite nustatyti tiesiogiai savo PHp skripte.

Jeigu jūs klaidų pranešimus nustatote php.ini tuomet galite nustatyti kelis variantus vienu metu kokias būtent klaidas norite kad jums rodytų. Kaip pavyzdys:

error_reporting = E_ALL & ~E_NOTICE ; Rodomos visos klaidos ir nerodomi jokie įspėjimai
error_reporting = E_WARNING | E_NOTICE ; Klaidų pranešimai arba įspėjimai

Jeigu jūs naudosite .htaccess arba httpd.conf, tuomet negalėsite naudoti nustatytų konstantų tokių kaip E_ALL ar E_NOTICE. Vietoj to turėsite naudoti nustatytas kiekvienos skirtingos klaidos reikšmę:

# Tai nustato E_ALL & ~E_NOTICE - E_ALL yra reikšmė 30719 PHP 5.3 versijoje, PHP 5.2 versijoje reikšmė būtų - 6143
php_value error_reporting 30711
 
# Tai nurodo E_WARNING | E_NOTICE (2 | 8)
php_value error_reporting 10

Jeigu norėsite naudoti klaidų pranešimus ir juos nustatyti savo PHP skripte, tuomet galite naudoti ini_set() arba error_reporting() funkcijas:

<?php
    ini_set('error_reporting', E_ALL & ~E_NOTICE);
 
    error_reporting(E_WARNING | E_NOTICE);
?>

Galite taip pat pakoreguoti klaidos būseną ir išjungti laikinai klaidos pranešimą norint išvesti reikiamą informaciją:

<?php
    // Gaunamas originalus klaidos tipas ir išjungiamas klaidos pranešimas
    $klaida = error_reporting(0);
 
    // Galite atlikti norimus veiksmus kurie praneštų apie klaidos pranešimą ar įspėjimą
 
    // Atstatome buvusią klaidą
    error_reporting($klaida);
?>

Kaip klaidų pranešimai išvedami?

Klaidos gali būti išvedamos dviem būdais:

  • Log failas kuriame įrašomi klaidų pranešimai
  • Ekrane kuomet matoma klaidą mato vartotojas

Rekomenduojama kad klaidos pranešimai būtų išvedami tik kūrimo arba testavimo metu, kitu atveju geriausia kad vartotojas klaidos nematytų, o gautų vaizdžiai suformuotą pranešimą apie įvykusią klaidą, o tikroji klaida įrašoma į failą.

Norėdami rodyti arba nerodyti klaidų vartotojui, turite nustatyti display_errors su išjungimu (On) arba išjungimu (Off). Kaip pavyzdys pateikiamas .htaccess failo pavyzdys kuriame išjungiamas klaidų pranešimas vartotojui:

php_value display_errors Off

Jeigu norite kad klaidas įrašytų į failą turite įjungti log_errors nustatymus. Pagal nutylėjimą klaidų pranešimų failas bus įrašomas į serverio katalogą (kaip pavyzdys Apache katalogą kur yra nustatytas ErrorLog).
Jūs galite nustatyti savo norimą direktoriją ir failą kuriame bus įrašomos visos klaidos .htaccess faile:

php_value log_errors On
php_value error_log /kelias/iki/web/puslapio/log/php-errors.log

Klaidos @ valdymo operatorius

PHp taip pat leidžia paslėpti klaidų pranešimus ir jų neišvesti. Kartai tai yra naudinga kai kuriose situacijose, kaip pavyzdys jeigu norite atidaryti failą bet failo nepavyko atidaryti, tuomet jūs gausite klaidą. Žinoma galima sudaryti ir savo norimą situaciją kai neina atidaryti failo. Tokiu atveju nėra būtinybės kad klaida būtų išvesta.

<?php
    error_reporting(E_ALL);
 
    // Nustatome kad klaidos pranešimo nerodytų
    $fp = @fopen('/kelias/iki/failo.txt', 'r');
 
    if (!$fp) {
        // Nepavyko atidaryti failo
    }
?>

Mindaugas

IT specialistas, PHP programuotojas. Sritys: PHP, MySQL, JavaScript, Ajax, jQuery, Arduino, (x)HTML, CSS, XML

More Posts - Website

Žymos: , , ,

2 komentarai

  1. Atgalinis pranešimas: 5 PHP patarimai kaip geriau rašyti kodą | Blog.MySQL.Lt

  2. Taipogi gal reikėtu pažymėti tai, kad nuo 5.4 versijos E_ALL iš tikro rodys visas klaidas. Ir kad galima pačiam susikurti klaidų apdorojimo mechanizmą kuris visiškai pakeis PHP mechanizmą.

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *

Galite naudoti šias HTML žymas ir atributus: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>