home 2024. október 15., Teréz napja
Online előfizetés
PHP-hibakezelés (2.)
Erdsoft
2019.09.25.
LXXIV. évf. 38. szám
PHP-hibakezelés (2.)

Előző leckénkben megismerkedhettünk a PHP-hibakezelés alapjaival, ma pedig megtanuljuk, hogyan kell saját hibakezelő funkciót létrehozni.

Saját hibakezelő létrehozása

A PHP arra is lehetőséget nyújt, hogy a programozó saját funkciót hozzon létre, mely kezeli a PHP-motor által generált futásidejű hibákat. A saját hibakezelő nagyobb rugalmasságot tesz lehetővé, és jobban kontrollálja a hibákat — kivizsgálja őket, majd eldönti, mit kell tenni velük: üzenetet jelenít meg a felhasználó számára, naplózza a hibát egy fájlban vagy adatbázisban, kiküldi e-mailben, megpróbálja javítani a problémát, megszakítja a script futtatását, vagy egyszerűen ignorálja a hibát.

A saját hibakezelő funkciónak legalább két paramétert (errno és errstr) támogatnia kell, opcionálisan azonban még három paraméter (errfile, errline és errcontext) használható.

Nélkülözhetetlen paraméterek:

errno — Meghatározza a hiba szintjét, egész szám formájában. Ez a paraméter a megfelelő hibaszintállandónak felel meg (E_ERROR, E_WARNING stb.) — ezekről előző leckénkben olvashattál.

errstr — Meghatározza a hibaüzenetet, string formájában.

Opcionális paraméterek:

errfile — Meghatározza a script fájl nevét, melyben a hiba megjelent, string formájában.

errline — Meghatározza a sor számát, melyben a hiba megjelent, string formájában.

errcontext — Meghatározza a tömböt, mely tartalmazza azokat változókat és értékeit, amelyek a hiba fellépésének pillanatában léteztek.

Most pedig következzen egy példa: a customError() hibakezelő minden olyan esetben aktiválódik, amikor hiba lép fel, legyen szó bármilyen triviális hibáról. A hibakezelő megjeleníti a hiba részleteit a böngészőben, majd megszakítja a script futtatását.

PHP-kód:

<?php

// Hibakezelő funkció

function customError($errno, $errstr) {

    echo '<b>Error:</b> [' . $errno . '] ' . $errstr;

}

?>

Ahhoz, hogy utasítani tudjuk a PHP-t arra, hogy a saját hibakezelő funkciónkat használja, a beépített set_error_handler() funkciót tudjuk alkalmazni, melyben meghatározzuk a funkció nevét.

PHP-kód:

<?php

// Hibakezelő funkció

function customError($errno, $errstr) {

    echo '<b>Error:</b> [' . $errno . '] ' . $errstr;

}

 

// Hibakezelő beállítása

set_error_handler('customError');

 

// Hiba beindítása

echo($test);

?>

A hibák naplózása

A hibákat naplózhatjuk szöveges fájlba, a következő módon:

PHP-kód:

<?php

function calcDivision($dividend, $divisor) {

    if ($divisor == 0) {

        trigger_error('calcDivision(): Az osztó nem lehet nulla', E_USER_WARNING);

        return false;

    }

    else {

        return ($dividend / $divisor);

    }

 

}

function customError($errno, $errstr, $errfile, $errline, $errcontext) {

    $message = date('Y-m-d H:i:s - ');

    $message .= 'Hiba: [' . $errno . '], ' . $errstr . ' in ' . $errfile . ' on line ' . $errline . ', ';

    $message .= 'Változók:' . print_r($errcontext, true) . "rn";

   

    error_log($message, 3, 'logs/app_errors.log');

    die('Probléma lépett fel, próbálja újra.');

}

set_error_handler('customError');

echo calcDivision(10, 0);

echo 'Ez soha nem lesz kinyomtatva.';

?>

 

A hiba részleteit e-mail formájában is kiküldhetjük, erre pedig szintén az error_log() funkciót használhatjuk.

PHP-kód:

<?php

function calcDivision($dividend, $divisor) {

    if ($divisor == 0) {

        trigger_error('calcDivision(): Az osztó nem lehet nulla', E_USER_WARNING);

        return false;

    }

    else {

        return ($dividend / $divisor);

    }

}

function customError($errno, $errstr, $errfile, $errline, $errcontext) {

    $message = date('Y-m-d H:i:s - ');

    $message .= 'Hiba: [' . $errno . '], ' . $errstr . ' in ' . $errfile . ' on line ' . $errline . ', ';

    $message .= 'Változók:' . print_r($errcontext, true) . "rn";

   

    error_log($message, 1, 'webmaster@example.com');

    die('Probléma lépett fel, próbálja újra. A hiba jelentve lett a webmesternek.');

}

set_error_handler('customError');

echo calcDivision(10, 0);

echo 'Ez soha nem lesz kinyomtatva.';

?>

 

Hiba kiváltása:

A PHP-motor minden alkalommal hibát vált ki, amikor problémába ütközik a script futtatása során, de magunk is tudunk hibát kiváltani. Ennek köszönhetően az alkalmazásunk erősebb lesz, hiszen megjelölheti az esetleges gondokat, még mielőtt azok súlyos hibákká válnának.

A hiba kiváltására a trigger_error() funkciót használhatjuk, melybe beiktatjuk a generálni kívánt hibaüzenetet:

trigger_error('Hiba lépett fel.');

Figyeljük meg a következő funkciót, melynek feladata, hogy elvégezze az osztás műveletét két számmal.

PHP-kód:

<?php

function calcDivision($dividend, $divisor) {

    return ($dividend / $divisor);

}

 

// Funkció lehívása

echo calcDivision(10, 0);

?>

 

Ha a 0 érték a $divisor (osztó), a PHP-motor által generált hiba így fog megjelenni:

Warning: Division by zero in C:wampwwwprojecttest.php on line 3

Ha ennél jobb, több információt tartalmazó hibaüzenetet szeretnénk, a trigger_error() funkciót hívhatjuk segítségül:

<?php

function calcDivision($dividend, $divisor) {

    if ($divisor == 0) {

        trigger_error('Az osztó nem lehet nulla', E_USER_WARNING);

        return false;

    }

    else {

        return ($dividend / $divisor);

    }

}

 

// Funkció lehívása

echo calcDivision(10, 0);

?>

 

Megjelenített hibaüzenet:

Warning: Az osztó nem lehet nulla in C:wampwwwprojecterror.php on line 4

Jó gyakorlást!

 


 

Nyereményjáték

Rovatunk elsődleges célja, hogy közelebbről is bemutassa a legismertebb webtechnológiákat. Azok között az olvasók között, akik minden héten követik rovatunkat, azaz velünk tanulják a programozás alapjait és kitöltik a feladatsort, a sorozat végén egy laptopot sorsolunk ki.

A játék heti kérdése:

Melyik funkciót kell használnunk, ha utasítani szeretnénk a PHP-t arra, hogy a saját hibakezelő funkciónkat használja?

1. trigger_error
2. set_error_handler
3. customError
 

A választ a tanulok@erdsoft.com e-mail-címre kell elküldeni, a tárgysorba pedig a következőt kell beírni: HÉTNAP-TANULOK. Sok szerencsét!
 


 

Néhány szó rólunk:

Az ErdSoft (www.erdsoft.com) 2011-ben alakult meg. Csapatunkat a fiatalos lendület, a szakértelem, a folyamatos tanulás és tapasztalatgyűjtés jellemzi. Ügyfeleinknek igyekszünk teljes körű szolgáltatást nyújtani — bátran fordulhatnak hozzánk, legyen szó webfejlesztésről, alkalmazásokról, SEO-optimalizálásról, grafikai tervezésről, marketingről vagy szövegírásról. Csapatunk sikerét mi sem bizonyítja jobban, mint a több száz elkészült weboldal és a számos elégedett ügyfél Szerbiában, Magyarországon és az Egyesült Királyságban.

Hozzászólások
Hozzászólások
0
Hozzászólás küldése
1000 karakter áll rendelkezésére
A megjegyzésekben kifejtett vélemények a hozzászólások szerzőinek magánvéleményei, és nem tükrözik az internetes portál véleményét. A megjegyzéseket moderáljuk és jóváhagyjuk az általános szerződési feltételeknek megfelelően.
Támogatóink
Az oldal sütiket használ, hogy személyre szabjuk a tartalmakat és reklámokat, hogy működjenek a közösségi média funkciók, valamint hogy elemezzük a weboldal forgalmát. Bővebben a "Beállítások" gombra kattintva olvashat.
Az oldal sütiket használ, hogy személyre szabja az oldalon megjelenő tartalmat és reklámokat..